かなり初歩的な質問となってしまう可能性が高いかも知れませんが、
ネット上で検索してもそれらしき答えが出てこないためご質問させてください。
今回行いたい処理としては、
セル範囲(今回は1~54列の範囲)を変数に格納し、ループ処理で一致条件した分を
配列(Redim配列)に格納し、最終反映先(別シート)へ反映といった処理を行いたい。
1つずつの処理であれば、以下のようなイメージで上手くいくのですが・・・
vba
1tbl(i,1) = ms1.cells(i,1) 2tbl(i,2) = ms1.cells(i,2) 3tbl(i,3) = ms1.cells(i,3) 4.... 5tbl(i,54) = ms1.cells(i,54)
後先の修正やコーディングに時間が掛かることや処理時間が結構要していることから
セル範囲を変数に入れて代入すれば一括で格納できるのでは・・・と
考え、最終以下のようなコードで組み立てました。
VBA
1Sub 条件一致抽出反映() 2 3'---------------------------------------- 4Dim wb As Workbook 5Dim ms1 As Worksheet,ms2 as Worksheet 6 7Set wb = ThisWorkbook 8Set ms1 = wb.Sheets(1)'リスト 9Set ms2 = wb.Sheets(2)'反映先 10'---------------------------------------- 11 12mRow = ms1.Cells(Rows.Count, 1).End(xlUp).Row 13 14Dim tb, tbl 15Dim fnd1 As String, fnd2 As String 16Dim rng 17Dim i As Long, j As Long 18 19j = 1 20ReDim tbl(1 To mRow, 1 To 54) 21 22For i = 3 To mRow 23 24 fnd1 = ms1.Cells(i, 12).Value 25 fnd2 = ms1.Cells(i, 10).Value 26 rng = ms1.Range(ms1.Cells(i, 1), ms1.Cells(i, 54)).Value 27 28 If Not fnd1 = "対象外" Then 29 If fnd2 = "" Or fnd2 = "※" Then 30 tbl(j) = rng 31 j = j + 1 32 End If 33 End If 34Next i 35 36ms2.Range("A3:BB" & UBound(tbl)) = tbl 37 38End Sub
ところが「インデックスが有効範囲にありません。」と表示されて正常に動かない状況です。
そもそもセル範囲を配列に格納すること自体が間違っている可能性は高そうな気はしており、結局は行と列(x,y)を変数にしてFor文で回す他対応はなさそうな気はしています。
また自分なりにネット上で「VBA セル範囲 一致 格納」、「VBA セル範囲 ループ 格納」等
ヒットしそうなワードを組み合わせて検索したのですがそれらしきものが見当たらず、
解決に至っておりません。
データ量:
A1からBB列最終行までの範囲から条件一致した分
※全体:最終行はおおよそ3万行を想定しているため、合計162万レコード程度
その他気になる点:
上手く伝わる自信はないのですが、
配列上の範囲(インデックス番号?)を別の配列に格納する方法はありますでしょうか。
イメージ:オブジェクト上で表した場合・・・Range(cells(i,1),cells(i,54))
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/04 06:00
2021/12/04 06:19 編集
2021/12/05 09:18