我来自一个 Unix 世界,我从来不需要用 VBA 为 Office 开发一些东西,我现在必须做一些,我很难过!请帮我! :)
所以我有 2 个 Excel 表(我们称它们为 Sheet1 和 Sheet2)和 2 个表单(Form1 和 Form2)来编辑/添加数据。
在 Sheet1 中,前两列是 MovieId 和 MovieName。我们不知道这些列中有多少行。
Form1 控制 Sheet1 中的数据,Form2... 在 Sheet2 中控制数据。
在 Form2 初始化时,我想创建一个类似于 (MovieId1,MovieName1;MovieId2,MovieName2;...,...;MovieIdN,MovieNameN) 的二维数组,其中该数据已从 Sheet1 中提取,如排序如果您愿意的话,可以使用 Java 中的 map ...
如果它是这样对我来说实际上没问题: (0,"MovieId0;MovieName0";1,"MovieId1,MovieName1";..,"..";N,"MovieIdN,MovieNameN")
我不知道如何使用变量最后一行编号创建数组,因为编译器似乎总是想要一个常量来初始化数组......
请赐教!
最佳答案
看Value
方法或 Value2
房产 .
例如Range("$A$2:$B$4").Value2(1,1)
或者Range("$A$2:$B$4").Value()(1,1)
数组的下界从 1 开始。lbound(Range("$A$2:$B$4").Value2, 1)
- 行元素从ubound(Range("$A$2:$B$4").Value2, 2)
- 行元素结束lbound(Range("$A$2:$B$4").Value2, 2)
- 列元素从ubound(Range("$A$2:$B$4").Value2, 2)
- 列元素结束
编辑:遍历数组的代码
Dim myAddress As String
Dim dataArray As Variant
Dim rowStart As Long, rowEnd As Long
Dim colStart As Long, colEnd As Long
Dim rowCtr As Long
Dim colCtr As Long
myAddress = "$A$2:$B$4"
dataArray = Range(myAddress).Value2
rowStart = LBound(dataArray, 1)
rowEnd = UBound(dataArray, 1)
colStart = LBound(dataArray, 2)
colEnd = UBound(dataArray, 2)
For rowCtr = rowStart To rowEnd
For colCtr = colStart To colEnd
Debug.Print rowCtr & ":" & colCtr, vbTab & dataArray(rowCtr, colCtr)
Next
Next
EDIT2:在我的示例中,我假设地址为
$A$2:$B$4
.您可以在其前面加上工作表名称。例如
Sheet1!$A$2:$B$4
或 Sheet2!$A$2:$B$4
附带说明,数组可以定义为动态的(如果它是一维的)。
例如
dim my1DArray() as Integer
二维数组见以下代码
Dim myArray
Dim dynamicRows As Integer
dynamicRows = 2
ReDim myArray(0 To dynamicRows, 0 To dynamicRows)
myArray(0, 0) = "hello"
dynamicRows = 20
ReDim myArray(0 To dynamicRows, 0 To dynamicRows)
MsgBox myArray(0, 0)
myArray(0, 0) = "hello"
ReDim Preserve myArray(0 To dynamicRows, 0 To dynamicRows)
MsgBox myArray(0, 0)
关于arrays - MS Excel -> 2 列到二维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1796852/