0

仕事で使用するパーサーに取り組んでいます。基本的に、私は処理するために解析して多次元配列に格納する必要があるデータ行でいっぱいの 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 のバックグラウンドから来ているので、これは私にとっては大きく異なります。

4

2 に答える 2

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
于 2012-05-09T12:07:54.097 に答える
0

aArray の次元を切り替えました。コードでは、aArray を redim して (count_of_rows_in_usedRang,count_of_elements_in_a) で埋めます。

質問の最初の部分の出力にも同様の問題があると思います。そうでない場合: 投稿してください。Excel シートの内容と結果として得られたもの。

于 2012-05-08T12:12:13.237 に答える