ExcelVBAの配列についてです。
VBAの勉強を始めたばかりの初心者なので、コードとともに、その意味も一緒に教えていただきたいです。 2つのブックは全く同じ書式です。ただし、各列の7行目から最終行までの行数は異なり、セルの値は同じものもあれば違うものもあります。
そこで、2つのブックのD列のみを比較します。
比較方法は、(1)マクロを実行するブック(ThisWorkbook)ではD列7行、8行、9行、...最終行
(2)比較対象として開くブック(Openファイル)はD列全体
つまり、(1)D列7行と(2)D列全体、(1)D列8行と(2)D列全体、(1)D列9行と(2)D列全体、... (1)D列最終行と(2)D列全体
というように、For...Nextでループさせています。
比較後、(1)ブックのセルの値が一致した行のI列に、(2)ブックのI列のセルの値を上書きし、さらに、(1)ブックのJ列に〇を付けるという処理をしています。
Dim ws as Worksheet
Dim wb As Workbook
Set ThisWorkbook.Worksheets(1)
'Openの()内にはGetOpenFilenameで取得済なので気にしないでください。
Set wb = Workbooks.Open()
Dim a As Long
a =
ws.Cells(Rows.count, 4).End(xlUp).Row
Dim rng1 As Range
Dim rng2 As Range
For b = 7 To a
Set rng1 = ws.Cells(b, 4)
Set rng2 =
wb.Worksheets(1).Cells(6, 1).CurrentRegion.colmns(4)
Set rng1 =rng2.Find(what:=rng1.Value, LookAt:=xlWhole)
If Not rng1 Is Nothing Then
ws.Cells(b, 9) = rng1.Offset(0, 5)
ws.Cells(b, 10) = "〇"
End If
Next
これで処理は完結しているのですが、配列を使えば高速処理が可能みたいなので試行錯誤してみましたが難しくてよくわかりませんでした。
配列にするにはどうすればよいのでしょうか。
静的配列?動的配列?
一次元配列?二次元配列?
また、ここらへんの用語についても詳しく説明していただけるとありがたいです。
それと、WorksheetFunction→Match関数での処理やUnion関数で処理するのも速いと見ました。
とにかく、Findメソッドを遅いとのことで勉強ついでに色々知りたいです。
他に、処理を高速化するものがあれば知りたいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。