|
回答が遅くなって済みません。
>格納したい当該の箇所は、取得前と取得後の抽出対象列が異なっています。
抽出元のシートでA列だった情報を抽出先のシートでB列に入れるというようなことでしょうか?
でしたら、既に作成されている二重ループの部分でそれは問題なくできているので、大丈夫ですよ。
そういう意図でないということでしたら連絡ください。
今回、配列にすべきはループの中で何度も読み取りあるいは書き込みをしているシートで、具体的にはmaster、daily3、matchの3つのシートです。
そこで、これらのシートのデータを格納する変数を
arr_master、arr_daily3、arr_matchとして、以下のようにします。
以前に提示していただいたコードをベースに修正しています。(変更していない部分は示していません)
Dim arr_master As Variant
Dim arr_daily3 As Variant
Dim arr_match As Variant
Dim i As Long, j As Long
'元々のコードで Worksheets("daily2").Activate から始まる部分ですが、
'ここでもセルの読み書きが発生しています。
'ただ、ここはエクセルのオートフィルを使えばループを回さなくても簡単にできるので
'このように修正しています。
With ws_daily2.UsedRange
.AutoFilter field:=4, Criteria1:=False
.Copy ws_daily3.Range("A1")
End With
Worksheets("daily2").AutoFilterMode = False
'daily3シートのデータを配列に格納
arr_daily3 = Worksheets("daily3").UsedRange
'matchシートのデータ(この時点では空白)を配列に格納
'(行数はdaily3と同じにする)
With Worksheets("match")
arr_match = .Range(.Cells(1, "A"), .Cells(UBound(arr_daily3), "D"))
End With
'masterシートのデータを配列に格納
arr_master = Worksheets("master").UsedRange
'daily3シートのデータでmasterシートに該当するものを見つけて情報を転記
'(ここからセルを直接操作するのではなく配列を使っている)
For i = 2 To UBound(arr_daily3)
Application.StatusBar = "処理実行中....(現在 " & i & "件)"
For j = 2 To UBound(arr_master)
If arr_daily3(i, 2) = arr_master(j, 4) Then
arr_match(i, 1) = arr_master(j, 2)
arr_match(i, 2) = arr_master(j, 4)
arr_match(i, 3) = arr_master(j, 3)
arr_match(i, 4) = arr_master(j, 1)
Exit For
End If
Next j
Next i
'matchシートに見出しをセット
arr_match(1, 1) = arr_master(1, 2)
arr_match(1, 2) = arr_master(1, 4)
arr_match(1, 3) = arr_master(1, 3)
arr_match(1, 4) = arr_master(1, 1)
'(見出し列の分とNextでカウントが1つ増える分、マイナスは2にしています)
Application.StatusBar = "処理完了....(全 " & i - 2 & "件)"
'matchシートに配列場のデータを転記
With Worksheets("match")
.Range(.Cells(1, "A"), .Cells(UBound(arr_daily3), "D")) = arr_match
End With
'(matchシートをアクティブにする操作を省いているので、代わりにこのような書き方にしています)
With Worksheets("match")
.Range("A:D").Sort key1:=.Range("D1"), Order1:=xlAscending
End With
※提示していただいたコードで
If ws_daily2.Range("B" & daily_num).Value = mail_match Then
とありましたが、ws_daily3ではないでしょうか?(以前のものではそうでしたので)
|
|