スポンサーリンク

【VBA】フィルタ・並び替えの発展的なテクニック:ユーザー指定条件をInputBoxで受け取ってフィルタする方法

Excelでデータを扱う際、毎回決まった条件でフィルタをかけるだけでなく、その都度条件を入力して動的にフィルタをかけたい場面も多くあります。
例えば次のようなケースです。

  • 担当者名を入力して、その人のデータだけを抽出したい
  • 特定の日付を入力して、その日以降のデータだけを表示したい
  • 金額のしきい値を入力し、指定以上のデータを確認したい

こうした場合、VBAのInputBoxを利用してユーザーに条件を入力させ、その値をAutoFilterに渡す方法が便利です。


スポンサーリンク

1. 基本コード例

以下の例では、担当者名をユーザーに入力させ、その担当者に該当する行だけを表示するサンプルです。

Sub フィルタ_ユーザー入力条件()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim targetValue As String
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '最終行
    
    'ユーザーに担当者名を入力させる
    targetValue = InputBox("抽出したい担当者名を入力してください")
    
    '入力が空欄の場合は終了
    If targetValue = "" Then
        MsgBox "処理をキャンセルしました"
        Exit Sub
    End If
    
    '既存のフィルタを解除
    If ws.AutoFilterMode Then ws.AutoFilterMode = False
    
    'A列(担当者名)を対象にフィルタ適用
    ws.Range("A1:C" & lastRow).AutoFilter Field:=1, Criteria1:=targetValue
End Sub

スポンサーリンク

2. コードのポイント解説

  • InputBox
    ユーザーに文字列や数値を入力させるダイアログを表示します。ここでは担当者名を入力する想定です。
  • 入力が空欄なら終了
    キャンセルや空欄入力に備えて、If targetValue = "" Then Exit Sub を入れるのが実務での安全対策になります。
  • AutoFilter の Field番号
    Field:=1 は「範囲内の1列目」を意味します。今回のコードでは Range("A1:C...") を対象にしているため、1列目は「A列(担当者名)」です。
  • 既存のフィルタを解除
    If ws.AutoFilterMode Then ws.AutoFilterMode = False で事前にリセットしてから新しい条件を適用することで、不要なフィルタが残るのを防ぎます。

スポンサーリンク

3. 数値を条件に使う場合の応用例

例えば「金額が100以上のデータだけ抽出したい」場合は以下のように書けます。

Sub フィルタ_数値条件()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim threshold As Double
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row 'C列(売上)
    
    'ユーザーにしきい値を入力させる
    threshold = Val(InputBox("抽出する金額の下限を入力してください"))
    
    '入力が0の場合はキャンセルと判断
    If threshold = 0 Then
        MsgBox "処理をキャンセルしました"
        Exit Sub
    End If
    
    '既存のフィルタを解除
    If ws.AutoFilterMode Then ws.AutoFilterMode = False
    
    'C列(売上)を対象にフィルタ適用
    ws.Range("A1:C" & lastRow).AutoFilter Field:=3, Criteria1:=">=" & threshold
End Sub

💡ポイント

  • Criteria1:=">=" & threshold のように演算子と数値を文字列結合することで、数値条件も動的に設定できます。

スポンサーリンク

4. 実務での活用シーン

  • 営業リストで「担当者名」を入力 → その人の案件だけ表示
  • 日報一覧で「日付」を入力 → その日以降の記録だけ抽出
  • 受注データで「金額しきい値」を入力 → 高額案件だけ確認

毎回異なる条件を使う場合に特に便利です。


5. 注意点

  • 入力値が存在しない場合(例:担当者名が違う場合)は、結果が空欄になることがあります。
  • 数値条件を扱う場合、文字列として扱われると意図通りに抽出されないので、必ず Val で数値化するのがおすすめです。
  • 入力欄を複数作りたい場合は、InputBox を2回以上使うか、UserForm を活用する方法もあります。

6. まとめ

  • InputBoxを使えば、ユーザーが入力した値をそのままフィルタ条件にできる
  • 文字列だけでなく数値条件(>=, <=, =)も柔軟に設定可能。
  • 実務で「その都度違う条件で絞り込みたい」場面に非常に役立つ。

コメント

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