Excel VBA 逆引き集 | 編集フォーム

Excel VBA
スポンサーリンク

編集フォームの基本

Excel VBAで「既存データを選んで編集したい」「検索して選んだ行をフォームで修正したい」といった場面では 編集フォーム を作ると便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • 編集フォームとは?
    シートにある既存データをUserFormに読み込み、ユーザーが修正して保存できる仕組み。
  • 用途:
    • 顧客情報の修正
    • 商品マスタの更新
    • 入力済みデータの再編集
  • 流れ:
    1. UserFormに 検索欄(TextBox)表示欄(TextBoxやComboBox)保存ボタン を配置。
    2. 検索で対象データを取得。
    3. フォームに値を表示。
    4. 修正後、保存ボタンでシートに書き戻す。

テンプレ1:検索して編集フォームに表示

UserFormに TextBox1(検索キーワード)TextBox2(名前)TextBox3(年齢)CommandButton1(検索) を配置。

Private Sub CommandButton1_Click()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long, found As Boolean
    found = False
    
    For i = 2 To lastRow
        If ws.Cells(i, 1).Value = TextBox1.Value Then
            TextBox2.Value = ws.Cells(i, 2).Value   ' 名前
            TextBox3.Value = ws.Cells(i, 3).Value   ' 年齢
            found = True
            Exit For
        End If
    Next i
    
    If Not found Then
        MsgBox "該当データは見つかりませんでした"
    End If
End Sub
VB
  • ポイント:
    • 検索キーワード(IDなど)で対象行を探す。
    • 見つかったらフォームに値を表示。

テンプレ2:編集内容をシートに保存

UserFormに CommandButton2(保存ボタン) を配置。

Private Sub CommandButton2_Click()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long
    For i = 2 To lastRow
        If ws.Cells(i, 1).Value = TextBox1.Value Then
            ws.Cells(i, 2).Value = TextBox2.Value   ' 名前
            ws.Cells(i, 3).Value = TextBox3.Value   ' 年齢
            MsgBox "データを更新しました"
            Exit For
        End If
    Next i
End Sub
VB
  • ポイント:
    • 検索キー(ID)で対象行を特定。
    • フォームの値をシートに書き戻す。

テンプレ3:ListBoxで選択して編集

UserFormに ListBox1(一覧表示)TextBox2(名前)TextBox3(年齢)CommandButton1(編集開始) を配置。

Private Sub UserForm_Initialize()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long
    ListBox1.ColumnCount = 3
    
    For i = 2 To lastRow
        ListBox1.AddItem ws.Cells(i, 1).Value
        ListBox1.List(ListBox1.ListCount - 1, 1) = ws.Cells(i, 2).Value
        ListBox1.List(ListBox1.ListCount - 1, 2) = ws.Cells(i, 3).Value
    Next i
End Sub

Private Sub CommandButton1_Click()
    Dim idx As Long
    idx = ListBox1.ListIndex
    
    If idx <> -1 Then
        TextBox2.Value = ListBox1.List(idx, 1)
        TextBox3.Value = ListBox1.List(idx, 2)
    End If
End Sub
VB
  • ポイント:
    • ListBoxで一覧を表示。
    • 選択した行をフォームに読み込んで編集。

テンプレ4:保存時に確認メッセージを出す

Private Sub CommandButton2_Click()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim ans As VbMsgBoxResult
    
    ans = MsgBox("この内容で更新しますか?", vbYesNo)
    If ans = vbYes Then
        ws.Range("B2").Value = TextBox2.Value
        ws.Range("C2").Value = TextBox3.Value
        MsgBox "更新しました"
    Else
        MsgBox "更新をキャンセルしました"
    End If
End Sub
VB
  • ポイント:
    • 更新前に確認を取る。
    • 誤操作を防げる。

例題で練習

'例1:検索してフォームに表示
'例2:編集内容をシートに保存
'例3:ListBoxで選択して編集
'例4:保存時に確認メッセージ
VB

初心者向けポイント

  • 検索キーを決める → IDやコードを基準にすると便利。
  • フォームに値を読み込む → TextBoxやComboBoxに表示。
  • 保存処理でシートに書き戻す → 更新が反映される。
  • 確認メッセージを入れる → 誤操作防止。
  • ListBoxと組み合わせると便利 → 一覧から選んで編集できる。

👉 この「編集フォームテンプレ」を覚えておけば、Excel VBAで 既存データを検索・表示・修正・保存できる便利なフォーム を簡単に作成できます。

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