Excel VBA質問箱 IV

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

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


2281 / 13646 ツリー ←次へ | 前へ→

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

【68996】シート間比較して合致したらコピーする
質問  まいった!  - 11/5/6(金) 16:24 -

引用なし
パスワード
   「シート3」と「Sheet4」があるのですが(同ブックです)
「シート4」のG列に「Sheet3」のB列の値があったら、
「シート4」のI列の値を、「Sheet3」のG列に書き込む。としたいのですが、
下記のようにしましたが、うまくいきません。教えて下さい。

Dim 最終行 As Integer
Dim 行 As Integer
 Worksheets("Sheet4").Select
 最終行 = Range("G65536").End(xlUp).Row
 行 = 1
 Do Until 行 > 最終行
 ありなし = Application.CountIf(Worksheets("Sheet6").Range("C:C"), Cells(行, 7))
 If ありなし > 0 Then
    値 = Cells(行, 9).Value    
    Sheets("Sheet3").Select
    Range("C2:C10000").Find(What:=名, LookIn:=xlValues, LookAt:=xlWhole).Select
    j = ActiveCell.Address
    k = Mid(j, 2, 1)
    l = Mid(j, 4, 2)
     Cells(l, 7) = 値

【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

【68999】Re:シート間比較して合致したらコピーする
お礼  まいった!  - 11/5/6(金) 18:08 -

引用なし
パスワード
   ありがとうございました。
助かりました。

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