Excelマクロでシート間のデータ反映と行追加・削除を行う方法

Visual Basic

Excelで複数のシートを使い、あるシートの入力内容を別のシートに反映させるマクロを作成したい場合、加減算や行追加・削除を適切に行う方法を知っておくことが重要です。この記事では、シート1のデータに基づいてシート2の内容を反映させ、必要に応じて加減算、行削除、行追加を行う方法について解説します。

1. シート1とシート2のデータ構造を理解する

シート1には番号とそれに関連するデータが入力されており、シート2には更新したい番号と新しいデータが入力されています。シート2のデータを基に、シート1の対応する番号の行を更新したり、存在しない場合は新しい行を追加することが求められています。

具体的なデータ構造は以下の通りです。

  • シート1: 番号、B列、C列のデータ
  • シート2: 番号、変更後のB列、C列のデータ

シート2に入力された内容をシート1に反映させるためのマクロを作成します。

2. マクロの基本的な流れ

まず、シート2で入力された番号を読み取り、シート1にその番号が存在するかを確認します。存在する場合はその行を更新し、存在しない場合は新しい行を挿入します。さらに、B列やC列のデータに変更があれば、加減算を行います。

具体的な流れは以下の通りです。

  • シート2の番号を1行ずつチェック
  • シート1で対応する番号が見つかればB列とC列を更新
  • シート1に番号がない場合、新しい行を挿入
  • B列、C列の数値に変更があれば加減算
  • B列、C列が未入力の場合、その行を削除

3. シート1のデータを更新するマクロのコード

以下は、シート1とシート2のデータを反映させるための基本的なVBAマクロのコード例です。

Sub UpdateData()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastRow1 As Long, lastRow2 As Long
    Dim i As Long, j As Long
    Dim foundRow As Range

    Set ws1 = ThisWorkbook.Sheets("Sheet1")
    Set ws2 = ThisWorkbook.Sheets("Sheet2")

    lastRow1 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
    lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastRow2
        Set foundRow = Nothing
        For j = 2 To lastRow1
            If ws1.Cells(j, "A").Value = ws2.Cells(i, "A").Value Then
                Set foundRow = ws1.Cells(j, "A")
                Exit For
            End If
        Next j

        If Not foundRow Is Nothing Then
            ws1.Cells(foundRow.Row, "B").Value = ws1.Cells(foundRow.Row, "B").Value + ws2.Cells(i, "B").Value
            ws1.Cells(foundRow.Row, "C").Value = ws1.Cells(foundRow.Row, "C").Value + ws2.Cells(i, "C").Value
        Else
            ws1.Cells(lastRow1 + 1, "A").Value = ws2.Cells(i, "A").Value
            ws1.Cells(lastRow1 + 1, "B").Value = ws2.Cells(i, "B").Value
            ws1.Cells(lastRow1 + 1, "C").Value = ws2.Cells(i, "C").Value
            lastRow1 = lastRow1 + 1
        End If
    Next i

    For i = 2 To lastRow1
        If ws1.Cells(i, "B").Value = "" And ws1.Cells(i, "C").Value = "" Then
            ws1.Rows(i).Delete
            lastRow1 = lastRow1 - 1
        End If
    Next i
End Sub

このコードは、シート2の各行について、シート1に番号が存在するかを調べ、存在する場合はその行を更新します。存在しない場合は新しい行を追加します。また、B列とC列が空白の場合、その行を削除します。

4. 注意点と改善点

このマクロでは基本的な処理を実装していますが、データ量が多くなると処理が遅くなることがあります。データ量が非常に多い場合は、効率化のために検索やデータ更新の方法を改善することが有効です。

また、行削除を行う際には行番号が変更されるため、行削除の処理を後に行うようにしています。これにより、行削除後に問題が発生することを防げます。

5. まとめ:Excelマクロを活用してシート間でデータ更新を行う方法

シート1とシート2のデータを連携させ、加減算や行の追加・削除を行うマクロを作成することで、効率的にデータを更新することができます。上記のコード例を参考に、シート間でのデータ更新処理を実装してみてください。

このマクロをカスタマイズすることで、さらに複雑な処理にも対応できるようになりますので、シートの内容に応じて最適な方法を選択しましょう。

コメント

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