多维数组存储/打印问题

时间:2012-05-08 11:50:16

标签: excel vba

我正在研究解析器以供在工作中使用。基本上我有一个充满数据行的excel文档,我需要解析并存储到多维数组中以便使用。

这是我到目前为止的代码:

Dim a 
Dim iRows As Long 
Dim i As Integer 
Dim aArray() As Variant 

a = Array(2,3,4,5,6,9,10,14,19,21,23,25,29,38) 
iRows = ActiveWorkbook.Sheets(1).UsedRange.Rows.Count
ReDim aArray(iRows, UBound(a))

For i = 2 To iRows + 1 
    For x = 0 To UBound(a) 
        aArray(i - 2, x) = ActiveSheet.Cells(i, a(i - 2)).Value 
    Next x 
Next i 

请注意i = 2iRows + 1的偏移是忽略标题行

问题在于,当我尝试输出它时,我发现所有行都是相同的,因此aArray(0,1)aArray(1,1)是相同的值,它们应该是来自不同行的不同值excel文件。

此外,我应该每行存储14列,但是当我尝试输出任何超过位置9的值时,我会得到超出范围的错误

ActiveSheet.Cells(1, 1).Value = aArray(10, 0)
ActiveSheet.Cells(1, 2).Value = aArray(11, 0)

基于我用于指定要存储在主数组中的值的小数组,它们应该是每个子数组在aArray中包含的14个总位置。

任何见解?

请记住,这是我的第一个真正的VBA脚本,所以如果我犯了错误,请让我的患者来自JS / PHP背景,这对我来说有很多不同。

2 个答案:

答案 0 :(得分:0)

您在aArray中切换了尺寸。在代码中你用(count_of_rows_in_usedRang,count_of_elements_in_a)重新编写和填充aArray,我想用过的rang只有9行,所以aArray(10,0)超出范围而aArray(0,10)不会。

我认为问题的第一部分中的输出可能存在类似的问题。如果没有:请发帖,excel-sheet中的内容以及结果是什么。

答案 1 :(得分:0)

如果您只是想从工作表中读取数据,忽略标题,那么就会使其复杂化。这样的事情会起作用:

Const intOffsetRow As Integer = 2

Dim rngUsedRange As Range
Dim varWksArray As Variant

Set rngUsedRange = ActiveWorkbook.Sheets(1).UsedRange

With rngUsedRange
    varWksArray = .Range(Cells(intOffsetRow, 1), Cells(.Rows.Count, .Columns.Count)).Value
End With

Set rngUsedRange = Nothing

如果你不介意阵列中有空/空行/尺寸,可以进一步简化:

Const intOffsetRow As Integer = 1

Dim rngUsedRange As Range
Dim varWksArray As Variant

Set rngUsedRange = ActiveWorkbook.Sheets(1).UsedRange

varWksArray = rngUsedRange.Offset(intOffsetRow, 0).Value

Set rngUsedRange = Nothing