Excel VBA 逆引き集 | AutoComplete

Excel VBA
スポンサーリンク

AutoComplete(入力補完)の基本

Excel VBAで「入力途中の文字から候補を補完したい」「ユーザーが入力しやすいように自動補完したい」といった場面では AutoComplete処理 を組み込むことができます。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • AutoCompleteとは?
    入力途中の文字列から候補を探し、残りを自動で補完する仕組み。
  • 用途:
    • 商品名や顧客名の入力補助
    • 都市名やコードの入力補助
    • 入力ミスを減らす
  • 実装方法:
    • UserFormの TextBox に入力イベントを仕込む
    • シートや配列に候補リストを用意
    • 入力文字列に一致する候補を探して補完

テンプレ1:TextBoxで簡易AutoComplete

UserFormに TextBox1 を配置。候補リストを配列で用意。

Private Sub TextBox1_Change()
    Dim candidates As Variant
    candidates = Array("東京", "大阪", "名古屋", "札幌", "福岡")
    
    Dim inputText As String
    inputText = TextBox1.Text
    
    Dim i As Long
    For i = LBound(candidates) To UBound(candidates)
        If inputText <> "" And LCase(candidates(i)) Like LCase(inputText & "*") Then
            TextBox1.Text = candidates(i)
            TextBox1.SelStart = Len(inputText)   ' 入力済み部分を選択
            TextBox1.SelLength = Len(candidates(i)) - Len(inputText)
            Exit For
        End If
    Next i
End Sub
VB
  • ポイント:
    • 入力途中の文字に一致する候補を探す。
    • 残り部分を自動補完して選択状態にする。

テンプレ2:シートのデータを候補にする

Private Sub TextBox1_Change()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim inputText As String
    inputText = TextBox1.Text
    
    Dim i As Long
    For i = 2 To lastRow
        If inputText <> "" And LCase(ws.Cells(i, 1).Value) Like LCase(inputText & "*") Then
            TextBox1.Text = ws.Cells(i, 1).Value
            TextBox1.SelStart = Len(inputText)
            TextBox1.SelLength = Len(ws.Cells(i, 1).Value) - Len(inputText)
            Exit For
        End If
    Next i
End Sub
VB
  • ポイント:
    • シート「Data」のA列を候補リストに。
    • 入力補助をシートデータに連動させられる。

テンプレ3:複数候補をListBoxに表示(候補選択型)

UserFormに TextBox1ListBox1 を配置。

Private Sub TextBox1_Change()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim inputText As String
    inputText = TextBox1.Text
    
    ListBox1.Clear
    
    Dim i As Long
    For i = 2 To lastRow
        If inputText <> "" And LCase(ws.Cells(i, 1).Value) Like LCase(inputText & "*") Then
            ListBox1.AddItem ws.Cells(i, 1).Value
        End If
    Next i
End Sub

Private Sub ListBox1_Click()
    TextBox1.Text = ListBox1.Value
End Sub
VB
  • ポイント:
    • 候補をListBoxに表示。
    • 候補をクリックするとTextBoxに反映。

テンプレ4:ユーザーが選んだ候補をシートに書き戻す

Private Sub CommandButton1_Click()
    Worksheets("Result").Range("A1").Value = TextBox1.Value
    MsgBox "選択された値をシートに保存しました"
End Sub
VB
  • ポイント:
    • AutoCompleteで選んだ値をシートに書き戻す。

例題で練習

'例1:配列から候補を補完
' → TextBox1_Change にコードを記述

'例2:シートのデータを候補にする
' → TextBox1_Change にコードを記述

'例3:候補をListBoxに表示
' → TextBox1_Change と ListBox1_Click にコードを記述

'例4:選択値をシートに書き戻す
' → CommandButton1_Click にコードを記述
VB

初心者向けポイント

  • TextBoxのChangeイベントが鍵 → 入力が変わるたびに候補を探す。
  • SelStart / SelLengthで補完部分を選択 → 自動補完の見た目を再現。
  • 配列 or シートデータを候補に → 実務ではシート連動が便利。
  • ListBoxと組み合わせると柔軟 → 複数候補から選べる。
  • Validate処理と組み合わせると安心 → 候補外の入力を防げる。

👉 この「AutoCompleteテンプレ」を覚えておけば、Excel VBAで 入力補助機能を作り、ユーザーが効率的に正しいデータを入力できるフォーム を簡単に実装できます。

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