VBA数组和变体数组令我困惑!
如果我的二维数组基本上是电子表格中的一个范围,有没有办法设置一维新数组,它只等于二维数组中的一列?
这有意义吗?
编辑:
我有一个电子表格,它是一个报价模板。我引用的其中一些产品是我们不想引用的产品,因为它们不符合我们的指导原则。
我想浏览这些产品行,并通过检查产品是否有“踢”字段来识别哪些产品是坏的。如果确实如此,那么我将为该行(产品)制作其他字段。简单的宏。问题是我来自Python和C,我倾向于将这些电子表格看作一堆一维数组,我通常会编写循环来完成它们。
我过去所做的就是采用该范围,我只创建了一堆1维数组,然后我用“for循环”或“for each循环”循环。这种方法工作正常,但分配所有1维数组很痛苦。今天我想,也许有一种方法我只做同样的事情,但是使用二维数组,因为很容易将整个范围快速分配为二维数组。
无论如何,我遇到的问题是我不知道如何仅引用二维数组的一维(col)。
我可以为2D阵列的一列上的每个循环做一次吗?
答案 0 :(得分:1)
这说明了使用范围
的1-D或2-D阵列Sub GetCellDataInArrays()
Dim rng As Range, a, a2, data, r, c
Set rng = ActiveSheet.Range("A1:D12")
'get a column: Transpose creates a 1-D array
a = Application.Transpose(rng.Columns(2).Value)
Debug.Print "Column 2: ", Join(a, ",")
'get a row - note the double Transpose
a2 = Application.Transpose(Application.Transpose( _
rng.Rows(3).Value))
Debug.Print "Row 3:", Join(a2, ",")
'EDIT: how to loop over a 2-D array obtained from a worksheet range
data = rng.Value 'data is a 2-d 1-based array
For r = 1 To UBound(data, 1)
For c = 1 To UBound(data, 2)
Debug.Print "Row " & r & ":Col " & c & " = ", data(r, c)
Next c
Next r
End Sub
答案 1 :(得分:1)
在Excel中,Range对象非常灵活。你可以在很多方面做你想做的事。我将举两个例子:
For i = 1 to 10
b = Range("yourRange").Cells(i, yourColumn) + 1
Next i
如果为列指定常量值,则可以轻松遍历行,如图所示。或者如果你对For Each循环感觉更舒服:
For each c in Range("yourRange").Columns(1)
b = c + 1
Next
VBA在任何情况下都将每个Excel范围视为二维数组。您甚至可以使用常规数组语法,如:Range("yourRange")(row, col)