Excel VBA 逆引き集 | フォームから差分

Excel VBA
スポンサーリンク

フォームから差分(変更点の比較・表示)の基本

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で 入力内容の変更点を確認・記録・表示できる安全なフォーム を簡単に作成できます。

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