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のデータを連携させ、加減算や行の追加・削除を行うマクロを作成することで、効率的にデータを更新することができます。上記のコード例を参考に、シート間でのデータ更新処理を実装してみてください。
このマクロをカスタマイズすることで、さらに複雑な処理にも対応できるようになりますので、シートの内容に応じて最適な方法を選択しましょう。


コメント