我想让VBA选择一个Range,覆盖恒定数量的列但是与excel中的连续数据集的行数不同,只捕获包含匹配时间戳的行(在这种特定情况下,尽管匹配的能力任何标准显然都更具动态性。我想把这个Range送到另一个我有的宏。在我的宏在捕获的范围上运行其进程之后,我希望它使用下一个捕获的范围再次遍历整个过程。
A B C D E F
1 x x 12:10 x x x
2 x x 12:10 x x x
3 x x 12:10 x x x
4 x x 12:40 x x x
5 x x 12:40 x x x
6 x x 12:40 x x x
7 x x 12:40 x x x
8 x x 1:05 x x x
9 x x 1:05 x x x
10 x x 1:05 x x x
例如,
我想捕获A-F列,1-3行作为一个Range,运行我的宏,然后...
我想捕获A-F列,4-7行作为另一个Range,运行我的宏,然后......
我想捕获A-F列,第8-10行作为另一个Range,运行我的宏等等......直到没有更多范围可以捕获。
如您所见,这种情况下的行按时间戳区分。
我只是花了几天时间来掌握VBA,我对于什么做了基本的不确定性,而不是从我发现的其他例子中将这一部分拼凑起来的经验。
感谢您的帮助。
答案 0 :(得分:3)
最简单的方法可能是:
Option Explicit
Sub Demo()
Dim v As Variant
Dim i As Long, j As Long
Dim sh As Worksheet
Set sh = ActiveSheet
v = sh.[A1].CurrentRegion ' Assumes data range starts at cell A1
' Alternative method to get data block starting at A3
' Extend to a specified column number (NumberOfColumnsYouWant)
' Assumes all rows in your data block in columns A have data
v = sh.Range([A3], [A3].End(xlDown)).Resize(, NumberOfColumnsYouWant)
i = 1
j = 1
Do While i <= UBound(v, 1)
Do While j < UBound(v, 1)
If v(i, 3) = v(j + 1, 3) Then
j = j + 1
Else
Exit Do
End If
Loop
YourMacro Range(sh.Cells(i, 1), sh.Cells(j, UBound(v, 2)))
i = j + 1
j = i
Loop
End Sub
Sub YourMacro(rng As Range)
MsgBox rng.Address
End Sub