Excel女士 - > 2列成2维数组

时间:2009-11-25 13:17:37

标签: arrays excel vba

我来自Unix世界,我从来没有用VBA为Office开发一些东西,我现在必须做一些事情,我很难过!请帮我! :)

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

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

在Form2初始化时,我想创建一个2维数组,它将类似于(MovieId1,MovieName1; MovieId2,MovieName2; ...,...; MovieIdN,MovieNameN),其中此数据是从Sheet1中提取的,如果你愿意的话就像Java中的某种地图......

如果它像:(0,“MovieId0; MovieName0”; 1,“MovieId1,MovieName1”; ...,“..”; N,“MovieIdN,MovieNameN”)

我不知道如何使用变量的最后一行编号创建数组,因为编译器似乎总是需要一个常量来初始化一个数组......

请赐教!

5 个答案:

答案 0 :(得分:2)

查看Value 方法Value2 属性

e.g。 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$4Sheet2!$A$2:$B$4

在旁注中,可以动态定义数组(如果它是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)

答案 1 :(得分:1)

而是使用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

答案 2 :(得分:0)

假设数据在A1

中开始

Dim vArr as variant

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

答案 3 :(得分:0)

你的意思是:

Dim thearray() As Variant

ReDim thearray(1, range.Rows.Count)

您还可以使用记录集和GetRows从工作表中返回数组。

答案 4 :(得分:0)

查尔斯回答的轻微模式:

Dim vArr作为变体 vArr =工作表(“Sheet1”)。范围(“A1”)。CurrentRegion.Value

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