|
▼多摩川 さん:
こんばんは。
>テキストデータから番号リストとデータを読み取り、シート1のA列にあるリスト番号と照らし合わせ、番号が一致する時にデータをB列に記入する操作を行うコードを考えています。
>その際、ReDimステートメントを使用しているのですが、「インデックスが有効範囲にありません。」と
>実行時エラー9が発生しました。
原因は、neptuneさんの投稿のとおりだと思います。
例えば、
Dim 配列(1 to 5,1 to 10)
この↑2次元配列って、内部でシートイメージでデータが入るわけではありません。
Dim 配列(1 to 5,1 to 4, 1 to 3)
ましてやこれは内部で↑3次元空間にデータが配置されるわけでもありません。
内部では、すべて一次元の配列です。これを踏まえると、
上記のエラーも仕方が無いかなあ なんて思います。
シートに
A B C
1 1 2 3
2 4 5 6
3 7 8 9
4 10 11 12
とあるデータを
2次元配列では、
dim 配列(1 to 3,1 to 4) と配置し、
1 4 7 10
2 5 8 11
3 6 9 12
上記のようにデータを配置して運用すれば移行が可能です。
新規ブックの標準モジュールに
'==========================================================
Sub macro()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Long, j As Long, Cnt As Long
Dim id() As Long
Set ws1 = ThisWorkbook.Sheets(1)
Set ws2 = ThisWorkbook.Sheets(2)
With ws1.Range("a1:c30")
.Formula = "=int(rand()*10000)+1"
.Value = .Value
.Activate
End With
MsgBox "サンプルデータ 作成"
Cnt = ws1.Range("A1").End(xlDown).Row
For i = 1 To Cnt
ReDim Preserve id(1 To 3, 1 To i)
For j = 1 To 3
id(j, i) = ws1.Cells(i, j)
Next j
Next i
MsgBox "配列に格納完了 別シートに移行します"
For i = 1 To Cnt
For j = 1 To 3
ws2.Cells(i, j) = id(j, i)
Next j
Next i
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
上記を実行して結果とコードを見比べてみてください。
|
|