フォームから差分(変更点の比較・表示)の基本
Excel VBAで「フォームから入力した内容と既存データを比較して、どこが変更されたか(差分)を表示したい」という場面では 差分チェック処理 を組み込むと便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- 差分とは?
新しい入力値と既存データを比較して「違い」を抽出すること。 - 用途:
- 編集フォームで変更点を確認
- 保存前に差分をユーザーに提示
- 更新履歴を残す
テンプレ1:フォーム入力と既存データを比較して差分表示
UserFormに TextBox1(氏名)、TextBox2(年齢)、TextBox3(住所)、CommandButton1(差分チェックボタン) を配置。
既存データはシート「Data」のA2~C2にあると仮定。
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim oldName As String, oldAge As String, oldAddr As String
Dim diffMsg As String
' 既存データを取得
oldName = ws.Range("A2").Value
oldAge = ws.Range("B2").Value
oldAddr = ws.Range("C2").Value
' 差分チェック
diffMsg = ""
If TextBox1.Value <> oldName Then
diffMsg = diffMsg & "氏名: " & oldName & " → " & TextBox1.Value & vbCrLf
End If
If TextBox2.Value <> oldAge Then
diffMsg = diffMsg & "年齢: " & oldAge & " → " & TextBox2.Value & vbCrLf
End If
If TextBox3.Value <> oldAddr Then
diffMsg = diffMsg & "住所: " & oldAddr & " → " & TextBox3.Value & vbCrLf
End If
' 結果表示
If diffMsg = "" Then
MsgBox "変更はありません"
Else
MsgBox "変更点:" & vbCrLf & diffMsg
End If
End Sub
VB- ポイント:
- 既存データとフォーム入力を比較。
- 差分がある項目だけを表示。
テンプレ2:差分を別シートに記録(履歴管理)
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim wsLog As Worksheet: Set wsLog = Worksheets("Log")
Dim lastRow As Long, logRow As Long
Dim diffMsg As String
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
logRow = wsLog.Cells(wsLog.Rows.Count, "A").End(xlUp).Row
' 差分チェック
If TextBox1.Value <> ws.Cells(lastRow, 1).Value Then
diffMsg = "氏名変更: " & ws.Cells(lastRow, 1).Value & " → " & TextBox1.Value
wsLog.Cells(logRow + 1, 1).Value = diffMsg
End If
If TextBox2.Value <> ws.Cells(lastRow, 2).Value Then
diffMsg = "年齢変更: " & ws.Cells(lastRow, 2).Value & " → " & TextBox2.Value
wsLog.Cells(logRow + 1, 2).Value = diffMsg
End If
If TextBox3.Value <> ws.Cells(lastRow, 3).Value Then
diffMsg = "住所変更: " & ws.Cells(lastRow, 3).Value & " → " & TextBox3.Value
wsLog.Cells(logRow + 1, 3).Value = diffMsg
End If
MsgBox "差分をログに記録しました!"
End Sub
VB- ポイント:
- 差分を「Log」シートに保存。
- 更新履歴を残せる。
テンプレ3:差分をListBoxに表示(ユーザーに選択させる)
UserFormに ListBox1 を配置。
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim oldName As String, oldAge As String, oldAddr As String
oldName = ws.Range("A2").Value
oldAge = ws.Range("B2").Value
oldAddr = ws.Range("C2").Value
ListBox1.Clear
If TextBox1.Value <> oldName Then
ListBox1.AddItem "氏名変更: " & oldName & " → " & TextBox1.Value
End If
If TextBox2.Value <> oldAge Then
ListBox1.AddItem "年齢変更: " & oldAge & " → " & TextBox2.Value
End If
If TextBox3.Value <> oldAddr Then
ListBox1.AddItem "住所変更: " & oldAddr & " → " & TextBox3.Value
End If
If ListBox1.ListCount = 0 Then
ListBox1.AddItem "変更なし"
End If
End Sub
VB- ポイント:
- 差分をListBoxに一覧表示。
- ユーザーが確認しやすい。
テンプレ4:保存前に差分確認を必須にする
Private Sub CommandButton2_Click()
Dim ans As VbMsgBoxResult
ans = MsgBox("差分を確認しましたか?保存しますか?", vbYesNo)
If ans = vbNo Then
MsgBox "保存をキャンセルしました"
Exit Sub
End If
' 保存処理(例)
Worksheets("Data").Range("A2").Value = TextBox1.Value
Worksheets("Data").Range("B2").Value = TextBox2.Value
Worksheets("Data").Range("C2").Value = TextBox3.Value
MsgBox "保存しました!"
End Sub
VB- ポイント:
- 差分確認を促してから保存。
- 誤更新を防げる。
例題で練習
'例1:フォーム入力と既存データを比較して差分表示
'例2:差分をログシートに記録
'例3:差分をListBoxに表示
'例4:保存前に差分確認を必須にする
VB初心者向けポイント
- 差分チェックは「旧値と新値の比較」 →
If NewValue <> OldValue Then …が基本。 - 結果表示は MsgBox / ListBox / ログシート → 用途に応じて選べる。
- 保存前に差分確認を入れると安心 → 誤操作防止。
- 履歴管理に応用できる → ログシートに差分を残すと便利。
👉 この「フォームから差分テンプレ」を覚えておけば、Excel VBAで 入力内容の変更点を確認・記録・表示できる安全なフォーム を簡単に作成できます。
