我是 VBA 的新手,我希望得到一些帮助。
我有一个电子表格,其范围总是有 10 列,但可能有 X 行。我正在尝试编写一个 VBA 脚本,该脚本将遍历此范围并从每个单元格中提取值。
例如,如果我有 2 行,我需要 A1、B1、C1..J1,然后我需要 A2、B2、C2...J2。下一次我可以有 5 行,然后再有 3 行。
如何设置循环以使其正常工作?
我是 VBA 的新手,我希望得到一些帮助。
我有一个电子表格,其范围总是有 10 列,但可能有 X 行。我正在尝试编写一个 VBA 脚本,该脚本将遍历此范围并从每个单元格中提取值。
例如,如果我有 2 行,我需要 A1、B1、C1..J1,然后我需要 A2、B2、C2...J2。下一次我可以有 5 行,然后再有 3 行。
如何设置循环以使其正常工作?
您还可以使用动态命名范围并循环遍历它。有关更好的示例,请参阅此链接或 google。动态名称范围很强大,尤其是对于图表。
对于您的示例,您可以将名称范围引用设置为;
=OFFSET(Sheet1!$A$1,0,0,COUNT(Sheet1!$A:$A),10) '10 is the width and will go to column J
假设 A 列将具有表的真正最大行。
然后;
Dim arr() As Variant
arr = Range("YourRangeName")
For x = 1 To UBound(arr,1) 'Finds the max number of rows in the array, UBound(arr,2) finds the total columns.
'Do some code here where x steps through the array arr
' = arr(x, 1) 'column a
' = arr(x,2) 'column b
' = arr(x,3) ....
Next x
在代码中尽可能多地处理几乎总是更好/更快,即将Excel中的范围分配给数组然后循环遍历数组而不是引用单元格(尤其是在循环中)。
就像是
Dim lastRow as long
lastRow = UsedRange.Rows.Count 'or some other way of determining the last row used
for i = 1 to lastRow 'loop through all used rows
'ActiveSheet.Cells(i, 1).value 'column A
'ActiveSheet.Cells(i, 2).value 'column B
'ActiveSheet.Cells(i, 3).value 'column C
next i