【发布时间】:2012-08-06 23:44:51
【问题描述】:
我正在尝试编写一个宏,如果满足 3 个条件,它将复制行。如:
如果“A”=B,“D”=E,“F”=G 然后将行复制到工作表 2 上的下一个可用行
如果“A”=C,“D”=F,“F”=H 然后将行复制到工作表 2 上的下一个可用行
我需要重复上述步骤最多 50 次。列不会改变
这是我目前所拥有的:
`Sub SearchForString()
Dim LSearchRow As Integer
Dim LCopyToRow As Integer
On Error GoTo Err_Execute
'Start search in row 4
LSearchRow = 4
'Start copying data to row 2 in Sheet2 (row counter variable)
LCopyToRow = 2
While Len(Range("A" & CStr(LSearchRow)).Value) > 0
'If value in column E = "Mail Box", copy entire row to Sheet2
'If value in column D = "0", copy entire row to Sheet2
'If value in column A = "5", copy entire row to Sheet2
'If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then
If Range("F" & CStr(LSearchRow)).Value = "Mail Box" And _
Range("E" & CStr(LSearchRow)).Value = "0" And _
Range("A" & CStr(LSearchRow)).Value = "5" Then
'If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then
'Select row in Sheet1 to copy
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
'Paste row into Sheet2 in next row
Sheets("Sheet2").Select
Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
ActiveSheet.Paste
'Move counter to next row
LCopyToRow = LCopyToRow + 1
'Go back to Sheet1 to continue searching
Sheets("Sheet1").Select
End If
LSearchRow = LSearchRow + 1
Wend
'Position on cell A3
Application.CutCopyMode = False
Range("A3").Select
'MsgBox "All matching data has been copied."
'Exit Sub
'Search 2
'Start search in row 4
LSearchRow = 4
'Start copying data to row 3 in Sheet2 (row counter variable)
LCopyToRow = 3
While Len(Range("A" & CStr(LSearchRow)).Value) > 0
'If value in column E = "Mail Box", copy entire row to Sheet2
'If value in column D = "1", copy entire row to Sheet2
'If value in column A = "5", copy entire row to Sheet2
'If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then
If Range("F" & CStr(LSearchRow)).Value = "Mail Box" And _
Range("E" & CStr(LSearchRow)).Value = "1" And _
Range("A" & CStr(LSearchRow)).Value = "5" Then
'If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then
'Select row in Sheet1 to copy
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
'Paste row into Sheet2 in next row
Sheets("Sheet2").Select
Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
ActiveSheet.Paste
'Move counter to next row
LCopyToRow = LCopyToRow + 1
'Go back to Sheet1 to continue searching
Sheets("Sheet1").Select
End If
LSearchRow = LSearchRow + 1
Wend
'Position on cell A3
Application.CutCopyMode = False
Range("A3").Select
MsgBox "All matching data has been copied."
Exit Sub
Err_Execute:
MsgBox "An error occurred."
End Sub
【问题讨论】:
-
看来您已经很清楚如何复制行了。你被困在哪里了?您是否将 A 列到 B 列、D 列到 E 列中的值都在同一个工作表上进行比较?
-
如果第一个搜索找到多个匹配项,您的第二个搜索不会覆盖第一个搜索的复制值吗?至于重复多次:您应该将“搜索和复制”代码分离到一个单独的子中,该子需要三个参数:这些将是您在列 A、E 和 F 中寻找的值。然后只需为每个调用该子搜索值的组合。
-
是的,它们都将在同一个工作表上,大约有 15,000 行。
-
它不应该被覆盖,因为只会有 1 个结果。我正在查看一个数据库,每一行都有一个特定的 ID。我只是在寻找一种让它更简洁的方法,因为复制和粘贴搜索 50 次似乎并不理想。
-
我不知道如何写一个子.....