Ms Excel – > 2列转换为2维数组

我来自一个Unix世界,我从来不需要为VBA开发Office,我现在必须做一些,而且我很难过! 请帮帮我! 🙂

所以我有2个Excel表格(让我们称之为Sheet1和Sheet2)和2个窗体(Form1和Form2)来编辑/添加数据。

在Sheet1中,前两列是MovieId和MovieName。 我们不知道他们将在这个列中有多less行。 Form1控制Sheet1中的数据和Sheet2中的Form2 …。

在Form2初始化时,我想要创build一个2维数组,像(MovieId1,MovieName1; MovieId2,MovieName2; …,…; MovieIdN,MovieNameN),其中这个数据已经从Sheet1中提取出来,就像一个sortingJava的地图,如果你愿意…

(0,“MovieId0; MovieName0”; 1,“MovieId1,MovieName1”; ..,“..”; N,“MovieIdN,MovieNameN”)对我来说实际上是可以的。

我不知道如何创build一个variables的最后一行数组,因为编译器似乎总是想要一个常量来初始化一个数组…

请赐教!

看看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)开始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 

编辑2:在我的例子中,我假设地址为$A$2:$B$4
你可以用表格名称作为前缀。 例如Sheet1!$A$2:$B$4Sheet2!$A$2:$B$4

在旁注中,数组可以被定义为dynamic的(如果它是1维的)。 例如,将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) 

而是使用Range对象,用这个也可以使用表单中的UsedRange

 Sub Macro1() Dim sheet As Worksheet Dim range As range Dim row As Integer Set sheet = Worksheets("Sheet1") Set range = sheet.UsedRange For row = 1 To range.Rows.Count Next row End Sub 

假设数据以A1开始

Dim vArr作为变体

vArr =工作表( “工作表Sheet”)。范围( “A1”)。调整(工作表( “工作表Sheet”)。范围( “A65535”)。端部(xlup).row,2)

你的意思是:

 Dim thearray() As Variant ReDim thearray(1, range.Rows.Count) 

您还可以使用logging集和GetRows从工作表中返回一个数组。

稍微修改查尔斯的答案:

Dim vArr as variant vArr = Worksheets(“Sheet1”)。Range(“A1”)。CurrentRegion.Value

假设当然Sheet1中没有任何杂散的数据。