我正在寻找一个简单的excel宏,可以复制一行从一个工作表到另一个excel内的基础上有一个特定的数字/值在单元格中。我有两个工作表。一个称为“主”和工作表称为“top10”。
下面是一个数据示例。
下面是我尝试使用的宏:
Sub MyMacro()
Dim i As Long, iMatches As Long
Dim aTokens() As String: aTokens = Split("10", ",")
For Each cell In Sheets("master").Range("A:A")
If (Len(cell.Value) = 0) Then Exit For
For i = 0 To UBound(aTokens)
If InStr(1, cell.Value, aTokens(i), vbTextCompare) Then
iMatches = (iMatches + 1)
Sheets("master").Rows(cell.Row).Copy Sheets("top10").Rows(iMatches)
End If
Next
Next
End Sub
我确信我做了一些非常愚蠢的事情,导致这个程序无法运行。我可以运行宏本身而不会出现任何错误,但是没有任何东西被复制到我希望编译的工作表中。
3条答案
按热度按时间wqsoz72f1#
If (Len(cell.Value) = 0) Then Exit For
是无意义的。更改如下:bwntbbo32#
我认为代码在第一行数据后停止的原因是因为下一行测试的单元格为空(在示例电子表格中),因此退出循环(因为
Len(cell.Value) = 0
)。一个高级筛选器可以完全满足您的需要,而且速度更快。在示例电子表格中,您需要插入一个空行2,并在单元格A2中输入公式“=10”。然后下面的代码将完成您的需要(假设master
是ActiveSheet):有关高级过滤器的参考,请查看以下链接:http://chandoo.org/wp/2012/11/27/extract-subset-of-data/
cnwbcb6i3#
正如@Ioannis提到的,您的问题是主A3中的空单元格与您的
If (Len(cell.Value) = 0) Then Exit For
相结合我没有使用
if
来检测范围的结束,而是使用了以下代码:结果代码如下:
我用你的练习册测试了这个,效果很好