結論から申し上げます。
2次元配列にてExcelのデータを取得する際に、
1行目の取得が限界まで終了した後、
2行目の取得に移りたいと考えておりますが、
ここでエラーが出現する為、
別の方法で要件を満たすものを作りたいと考えております。
どなたかご教授下さい。
よろしくお願いします。
【エラー内容】
インデックスが有効範囲にありません
→場所:extractedData(j, i) = Cells(j + 4, i + 1)
において、右辺は正常に取得。しかし、左辺が参照できず。
エラー時のjとiの値
j=1,i=0
※ただし、iのFor文を回し終わった後の、jのFor文での2回目の処理での話です。
すなわち、
ある行で、取得したいデータがある右の最後の列まで取得後、次の行に移った時の話です。
【理解している事】
高次元配列において、最後の次元のみしか要素数を変更できない事。
すなわち、
ReDim Preserve buf(r, c)
において変更できるのはcのみ
Trancepose関数を利用しようにも、
以下のコードに加える事ができる方法がわかりかねております。
【実現したい事】
ある条件のもとで取得するデータを精査し、配列に入れて
新規シートにその精査後のデータを出力する。
※2次元配列にて、
Excelのデータ(A列~O列※ただしC列は取得しない)を取得
元データは縦が可変で横は不変。(縦=行、横=列)
・データを取得し配列に投下
・配列からデータを取り出し、新規シートへ出力する
現状は処理を2つにわけるプログラムを作っている最中です。
以下、現状のプログラムコード
※現在、データを取得してくる範囲はA4:O40です
VBA
1 2 3Dim CColum As String 4 5Dim lineNum As Integer 6 'COUNTA(A4:A40)=37と同等 7 lineNum = WorksheetFunction.CountA(Range("A4", Range("A" & Rows.Count))) 8 9 10'A列~O列まで 11ReDim extractedData(lineNum , 14) As Variant 12ReDim Preserve extractedData(lineNum, 14) As Variant 13 14For j = 0 To lineNum 15 16 For i = 0 To 14 17 'C列を無視(アルファベットが入っているデータがC列の為、以下で除外) 18 If Cells(j + 4, i + 1).Value Like "[A-Z]" Then 19 'C列を無視する為の捨て変数CColum 20 CColum = Cells(j + 1, i + 0) 21 Else 22 extractedData(j, i) = Cells(j + 4, i + 1) 23 End If 24 Next 25Next 26
回答3件
あなたの回答
tips
プレビュー