編集フォームの基本
Excel VBAで「既存データを選んで編集したい」「検索して選んだ行をフォームで修正したい」といった場面では 編集フォーム を作ると便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- 編集フォームとは?
シートにある既存データをUserFormに読み込み、ユーザーが修正して保存できる仕組み。 - 用途:
- 顧客情報の修正
- 商品マスタの更新
- 入力済みデータの再編集
- 流れ:
- UserFormに 検索欄(TextBox)、表示欄(TextBoxやComboBox)、保存ボタン を配置。
- 検索で対象データを取得。
- フォームに値を表示。
- 修正後、保存ボタンでシートに書き戻す。
テンプレ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で 既存データを検索・表示・修正・保存できる便利なフォーム を簡単に作成できます。
