For文 VBAで自動化 VBAテクニック集 VBA一覧 セル・値の取得と貼り付け 文法・構文 配列

【VBA】For文:配列を用いて項目名に合わせたデータ転記(実務レベル)

Excel VBAを利用して一つのExcelシートから別のシートにデータを転記する方法を解説します。ここでは、1つ目のシートに項目名とそれに対応する値があり、2つ目のシートには項目名のみがあるケースを例に取り上げます。

データを読み込み項目に合わせて転記する

  • ソースシートのA列とB列を配列で読み込みます。
  • 目的シートのA列の項目と一致の場合、B列に値を転記します。

  • 処理を実行すると目的シートのB列に値が書き込まれます。

サンプルコード

Sub TransferData()

Dim wsSource As Worksheet, wsDest As Worksheet
Dim lastRowSource As Long, lastRowDest As Long
Dim data As Variant, item As Variant
Dim i As Long, j As Long
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

' ソースシートと目的シートを設定
Set wsSource = ThisWorkbook.Worksheets("ソース") ' 1つ目のシート名を指定
Set wsDest = ThisWorkbook.Worksheets("目的") ' 2つ目のシート名を指定

' ソースシートの最終行を取得
lastRowSource = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
' 目的シートの最終行を取得
lastRowDest = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row

' ソースシートからデータを読み取り、辞書に格納
For i = 1 To lastRowSource

If Not dict.Exists(wsSource.Cells(i, 1).Value) Then

dict.Add wsSource.Cells(i, 1).Value, wsSource.Cells(i, 2).Value

End If

Next i

' 目的シートの項目名をチェックし、辞書に該当する項目名があれば値を転記

For j = 1 To lastRowDest

item = wsDest.Cells(j, 1).Value
If dict.Exists(item) Then

wsDest.Cells(j, 2).Value = dict(item)

End If

Next j

MsgBox "データ転送が完了しました。"

End Sub

注意点

  • このコードは、項目名が一意であることを前提としています。項目名が重複している場合、最初に見つかったデータのみが使用されます。
  • シート名やExcelのバージョンによっては、コードの微調整が必要な場合があります。

    -For文, VBAで自動化, VBAテクニック集, VBA一覧, セル・値の取得と貼り付け, 文法・構文, 配列