Excel VBA で末尾の数字を基準に行を抽出する方法【InputBox 利用サンプル】

目次

概要

本記事では、ユーザー入力に応じて セル値の末尾に一致する数字 を持つ行だけをフィルターで抽出する手順を解説いたします。数値として入力されたデータを文字列化しておくことで、ワイルドカード検索を正確に機能させる点がポイントです。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
データ範囲名前付き範囲 InvoiceList(列 A に伝票番号が格納されている想定)
マクロ設置先標準モジュール

サンプルコード(VBA)

Sub FilterByLastDigit()

    Dim askDigit   As Variant   ' ユーザー入力値
    Dim cellItem   As Range     ' ループ用セル
    Dim dataRange  As Range     ' 抽出対象範囲
    Dim wsTarget   As Worksheet
    
    Set wsTarget  = ActiveSheet
    Set dataRange = wsTarget.Range("InvoiceList")        ' 名前付き範囲を取得
    
    '--- 末尾数字をユーザーに入力してもらう ---
    askDigit = Application.InputBox( _
        Prompt:="抽出したい末尾の数字を入力してください。", Type:=2)
    
    ' キャンセル時は処理を終了
    If askDigit = False Or Len(askDigit) = 0 Then Exit Sub
    
    '--- 数値セルを文字列化し、ワイルドカード検索を有効化 ---
    For Each cellItem In dataRange.Columns(1).Cells
        If IsNumeric(cellItem.Value) Then
            cellItem.Value = "'" & cellItem.Value
        End If
    Next cellItem
    
    '--- フィルターで末尾一致を抽出 ---
    dataRange.AutoFilter Field:=1, _
                         Criteria1:="=* " & askDigit, _
                         Operator:=xlFilterValues

End Sub

コードのポイント

説明
9InvoiceList は列 A を含む表全体の名前付き範囲です。シート状況に合わせて変更してください。
12–14Application.InputBox を Type:=2(文字列入力)で呼び出し、末尾数字を取得しています。
20–23IsNumeric 判定が True のセルを文字列化しておくことで、=*数字 の検索が確実にヒットします。
27Criteria1:="=* " & askDigit で末尾数字をワイルドカード検索しています。xlFilterValues により入力内容が複数桁でも対応可能です。

応用例

目的実装方法
末尾ではなく先頭数字を検索Criteria1:=askDigit & "*" を指定します。
数字以外を入力された場合のエラーチェックIf Not IsNumeric(askDigit) Then MsgBox "数字を入力してください。": Exit Sub を追加します。
フィルター解除後、自動で矢印を非表示If wsTarget.AutoFilterMode Then wsTarget.AutoFilterMode = False を処理の最後に追加します。

よくある質問

質問回答
テーブル(ListObject)形式でも動作しますか。はい。ListObject.DataBodyRangedataRange に設定すると同様に抽出できます。
入力ボックスで複数数字をカンマ区切り指定したい場合は。Split 関数で配列化し、Operator:=xlFilterValues と組み合わせることで OR 条件抽出が可能です。

まとめ

セル値を一旦文字列化し、=*数字 のワイルドカード条件でオートフィルターを設定すると、末尾一致の行を正確に抽出できます。まずはサンプルマクロを実行し、ご自身のデータで意図どおりに行が抽出されるかをご確認ください。入力ボックスの文言や名前付き範囲を調整すれば、さまざまな用途に応用可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次