2012-05-08 79 views
1

我正在研究用于工作的解析器。基本上我有一个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 = 2的偏移和iRows + 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背景,所以这对我来说有很大的不同。

回答

0

您切换aArray中的尺寸。在代码中,你使用(count_of_rows_in_usedRang,count_of_elements_in_a)填充aArray,我想象使用的响度只有9行,所以aArray(10,0)超出范围,而aArray(0,10)不适用。

我认为在问题的第一部分输出可能有类似的问题。如果没有,请发布,excel表格中的内容以及结果。

+0

要命了很多帮助THKS – midaym

+0

我结束了不得不切换前两个值和下一次出现的i - 2在输出需要x像这样aArray(x,i - 2)= ActiveSheet.Cells(i,a(x))。价值完美现在完美 – midaym

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 
+0

他想复制整个范围,重新排列它的一些细胞。可能有更好的方法来做到这一点 - 我认为他在保持简单和多功能方面做得很好(如果需要其他行,或者需要以其他顺序更改,可以更改a())。 – Johanness