※ ChatGPTを利用し、要約された質問です(原文:カウンタを使用した配列の格納について)
カウンタを使用した配列の格納について
このQ&Aのポイント
Excel VBAにおけるカウンタを使用した配列の格納方法について悩んでいます。
データ番号とループ変数jの関係に問題があり、うまくデータが格納されません。
データの格納に関する具体的なコードやループの問題点を教えていただけないでしょうか?
EXCEL VBAについての質問です。
どなたか添削願えないでしょうか?
A1からE40までSingle形式のデータが入っています。
ただし、A列はすべて見出し、行には5行おきに1,6,11...行目に見出しが入っています。
4x4のデータが8個ある計算です。
見出しを除くデータをすべて(8,4,4)の配列に格納しようと思い、下記のコードをSheet(1)に
書きましたが、「インデックスが有効範囲にありません」と出てうまく格納できません。
上の「Next j」を生かして、下の「Next j」を殺し、イミディエイトウインドウで確認したところ、
ネストの外ではうまくループしているようですが、入れ子にするとデータがうまく入りません。
jのループ完了後には
j=36
データ番号=8
が入っているはずですが、j がうまく格納されないようで、値がすべて0になります。
上の「Next j」と直下の2行をいかした場合、きちんと値が入り、うまく機能するようです。
色々考えましたが、手詰まりになってしまったので、何がおかしいのか教えてもらえません
でしょうか?よろしくお願いします。
Option Base 1
Const データ数 As Integer = 8
Const 列数 As Integer = 4
Const 行数 As Integer = 4
Dim データ番号 As Integer
Sub 換算値格納()
ReDim 換算値(データ数, 行数, 列数) As Single
For j = 1 To 36 Step 5 '(例)j=1→データ番号1、j=6→データ番号2、....
データ番号 = (j - 1) / 5 + 1
Debug.Print "データ番号=" & データ番号 & " j=" & j
'Next j
'データ番号 = 8'<任意に変えてみてください>
'j = (データ番号 - 1) * 5 + 1
For i = 4 To 19
'列定義
'カウンタを4で割って1を足したものが0になる (例)14÷4=3...2 → 2+1=3
列 = i Mod 4 + 1
'行定義
'カウンタがちょうど割り切れたら行をひとつ増やす (例)i=4,8,12...にて列=1,2,3
If i Mod 4 = 0 Then 行 = 行 + 1
換算値(データ番号, 行, 列) = Cells(行 + j, 列 + 1).Value
Debug.Print "(" & データ番号 & "," & 行 & "," & 列 & ")は" & 換算値(データ番号, 行, 列)
Next i
Next j
End Sub
お礼
上のDebug.printに 「行=0」を入れたら機能するようになりました。 どうもありがとうございます。