【问题标题】:Excel VBA - Search for certain criteria in a column and copy that row to new worksheetExcel VBA - 在列中搜索某些条件并将该行复制到新工作表
【发布时间】:2015-03-19 22:04:23
【问题描述】:

我是 VBA 新手,所以我不确定我的代码有什么问题,或者这是否是做我想做的最好的方法。我有一个巨大的原始数据表,标题为“数据”,其中有很多列,其中之一是日期。首先,我希望宏创建四个标题为春季、夏季、秋季和冬季的新工作表,并将它们放在工作表计数的末尾。然后我想通过“数据”中的日期列搜索一个月,并将相应的行复制到与该月对应的季节工作表中。这就是我目前所拥有的——我的 if then 语句出现错误。我将日期列定义为一个数组,但我不确定是否需要定义它。但是,当使用此宏时,“数据”中的行数将不是恒定的。谢谢。

Sub Copy_Sorted_Data()

    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Spring"
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Summer"
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Fall"
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Winter"

    Dim Data As Worksheet
    Dim Spring As Worksheet
    Dim Summer As Worksheet
    Dim Fall As Worksheet
    Dim Winter As Worksheet
    Dim Entered() As Date
    Dim size As Integer
    Dim i As Integer

    size = WorksheetFunction.CountA(Worksheets("Data").Columns(1))
    ReDim numbers(size)

    For i = 1 To size
        numbers(i) = Cells(i, 9).Value
    Next i

    If Entered = March Or April Or May Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Spring")
    If Entered = June Or July Or August Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Summer")
    If Entered = September Or October Or November Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Fall")
    If Entered = December Or January Or February Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Winter")

    End If
    End If
    End If
    End If
End Sub

【问题讨论】:

  • 如果您在then 中的if 语句之后设置命令,他们不需要End If,所以我认为您应该编辑您的代码。
  • 好的,我会改变的。但是我收到类型不匹配错误,所以我认为这可能与我的“输入”变量被定义为日期有关。
  • 您如何从Data 表中读取entered?你刚刚读到numbers
  • 好的.. 所以我将 if 语句更改为“if numbers =”,但我仍然收到类型不匹配错误。
  • 查看我的答案了解更多详情

标签: excel vba


【解决方案1】:

第一。删除这些代码:

If Entered = March Or April Or May Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Spring")
If Entered = June Or July Or August Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Summer")
If Entered = September Or October Or November Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Fall")
If Entered = December Or January Or February Then ActiveSheet.Row.Value.Copy Destination:=Worksheets("Winter")
End If
End If
End If
End If

第二。当您想从第 9 列读取数据时,请从该列中找到 size

size = WorksheetFunction.CountA(Worksheets("Data").Columns(9))

第三。当你想找到你的结果时:

Dim SpringRows as long
Dim Summer as long
Dim Fall as Long
Dim WinterRows as Long

For i = 1 To size
    numbers(i) = Cells(i, 9).Value
    'working with month numbers is better
    If (Month(numbers(i)) = 3) OR (Month(numbers(i)) = 4) OR (Month(numbers(i)) = 5) then 
        SpringRows = SpringRows + 1
        Worksheets("Spring").Cells(SpringRows, 1).Value = numbers(i)
    End If
    ' ... and so on, for others
Next i

【讨论】:

  • 我仍然收到与此代码相同的错误,我最终做了其他完全不同的事情,现在可以正常工作。不过感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多