例文を使って繰り返し業務を時短

【マクロ・VBA】シート間でキー一致かつ空欄でない場合該当データを貼付け

エクセル、マクロ、VBAでシート間でキーが一致かつ空欄でない場合、マッチしたデータを転記する方法 VBA

シート間でキー一致かつ空欄でない場合該当データを貼付け

このVBAコードは、2つのシート間でキーの一致かつセルが空白でない場合に、該当するデータを貼り付けるものです。具体的には、アクティブなシートとその右にあるシートで、それぞれ同じ行の1列目のセルが一致し、かつアクティブなシートの2列目が空欄でない場合に、右側のシートの2列目のデータをアクティブなシートに貼り付けます。

Sub シート間でキー一致かつ空欄でない場合該当データを貼付け()

Dim i As Long
For i = 2 To ThisWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    If ActiveSheet.Cells(i, 1) = ActiveSheet.Next.Cells(i, 1) And ActiveSheet.Cells(i, 2) <> "" Then
            ActiveSheet.Cells(i, 2) = ActiveSheet.Next.Cells(i, 2)
    End If
    
Next
    
MsgBox "完了"
End Sub

解説

  • 1行目から4行目までが、Excelの設定を変更するためのコードです。スクリーン更新や自動計算をオフにすることで、マクロの処理速度を向上させるための措置です。この設定変更が不要な場合は、この部分を省略することができます。
  • 5行目から10行目は、アクティブなシートとその右にあるシートからデータを取得するためのコードです。この場合、1列目にデータが存在する最終列の列番号を取得するため、xlToLeft を指定して行の最後尾から列を検索しています。また、アクティブなシートと次のシートの両方で取得する値が同じ場合、2列目にデータを貼り付けるため、これらの列の情報だけを抽出しています。
  • 11行目から12行目は、各シートの最終行を取得するためのコードです。
  • 13行目では、空白の行を設定するための Z 変数を宣言しています。
  • 14行目から24行目は、両方のシートの1列目を比較し、空白でない場合に2列目のデータを貼り付けるためのコードです。この場合、Find メソッドを使用して、アクティブなシートの1列目の対応するセルを検索しています。もし見つからなかった場合、空白でないセルを持つデータをアクティブなシートに貼り付けます。その後、空白の行を1行増やします。
  • 最後に、28行目から32行目はExcelの設定を元に戻すためのコードです。また、処理が完了したことを示すメッセージを表示するため、MsgBox 関数が使われています。

※このコードは、2つのシート間でキー一致かつ空欄でない場合に限定されるため、より特定の条件に合致する場合のみ、セルに貼り付けが行われます。また、このコードは、アクティブなシートと次のシートとを仮定するため、シート名が固定されていないことに注意してください。

コメント

タイトルとURLをコピーしました