Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2742 / 76735 ←次へ | 前へ→

【79633】Re:指定期間でログインしたユーザーを知りたい ...
回答  亀マスター  - 18/2/21(水) 22:38 -

引用なし
パスワード
   回答が遅くなって済みません。

>格納したい当該の箇所は、取得前と取得後の抽出対象列が異なっています。
抽出元のシートで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ではないでしょうか?(以前のものではそうでしたので)

10 hits

【79618】指定期間でログインしたユーザーを知りたい ... amatsuno 18/2/14(水) 16:19 質問[未読]
【79619】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/14(水) 21:03 回答[未読]
【79620】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/15(木) 13:36 お礼[未読]
【79627】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/20(火) 16:36 質問[未読]
【79633】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/21(水) 22:38 回答[未読]
【79640】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/23(金) 15:53 発言[未読]
【79646】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/23(金) 22:55 発言[未読]
【79650】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/26(月) 16:07 発言[未読]
【79651】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/26(月) 18:53 発言[未読]
【79654】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/27(火) 17:56 お礼[未読]
【79641】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/23(金) 15:55 発言[未読]
【79642】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/23(金) 15:59 発言[未読]

2742 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free