Excel VBA質問箱 IV

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

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


13242 / 76734 ←次へ | 前へ→

【68998】Re:シート間比較して合致したらコピーする
発言  kanabun  - 11/5/6(金) 17:44 -

引用なし
パスワード
   ▼まいった! さん:

何度も何度もシートの範囲を Findするのは面倒なので、
Dictionaryオブジェクトに最初に登録しておいたらどうでしょう

Sub Try1()
  Dim WS3 As Worksheet
  Dim WS4 As Worksheet
  Set WS3 = Worksheets("Sheet3")
  Set WS4 = Worksheets("Sheet4")
  
  'WS4のG列の値と WS3のB列の値とを比較、
  'WS4のI列の値を、WS3のG列に書き込む。
  Dim a1, a2
  Dim b1, b2
  Dim i As Long
  Dim dic As Object
  
  '(1)WS4 のG列とI列の値を Dictionaryに登録
  With WS4.Range("G:G")
    With Excel.Range(.Item(1), .Item(.Count).End(xlUp))
      b1 = .Value
      b2 = .Offset(, 2).Value
    End With
  End With
  Set dic = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a1)
    dic(b1(i, 1)) = b2(i, 1)
  Next
  
  
  '(2)WS3のB列の値(a1配列)が Dictionaryのキーにあれば、 _
    DictionaryのItemを配列a2にコピー
  With WS3.Range("B:B")
    With Excel.Range(.Item(1), .Item(.Count).End(xlUp))
      a1 = .Value
      ReDim a2(1 To UBound(a1), 1 To 1)
      For i = 1 To UBound(a1)
        If dic.Exists(a1(i, 1)) Then
          a2(i, 1) = dic(a1(i, 1))
        End If
      Next
      .Offset(, 5).Value = a2
    End With
  End With
  
  Set dic = Nothing
End Sub

3 hits

【68996】シート間比較して合致したらコピーする まいった! 11/5/6(金) 16:24 質問
【68998】Re:シート間比較して合致したらコピーする kanabun 11/5/6(金) 17:44 発言
【68999】Re:シート間比較して合致したらコピーする まいった! 11/5/6(金) 18:08 お礼

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