Excel

VBAでオートフィルター・抽出条件とフィールドを選択可能にする

2021-02-15

条件を設定し、オートフィルターでデータ抽出する方法です。

  • 抽出条件:含む、で始まる、で終わる
  • フィルターの対象となるフィールド:1列目~4列目を選択可能

使い方:抽出条件とフィールドの選択可能なオートフィルターの使い方

基本操作はこちらを確認してください → オートフィルター抽出と解除の基本

ワークシートの設定

(1)以下の状態のワークシートを用意します。

セルB2は検索文字を入力します。

ワークシート

(2)リボン [ 開発 ] > [ コントロール ] グループ > [ 挿入 ] > [ ActiveXコントロール ] > [ コマンドボタン ]をクリックします。

ActiveXコントロール

コマンドボタンが設置された状態です。

コマンドボタン

(3)コマンドボタンを選択した状態で「プロパティ」をクリックします。

プロパティ

(4)オブジェクト名等はそのままでも使えますが、長いので変更しました。

  • オブジェクト名:Cmd1
  • Caption:抽出

コマンドボタンのカラーとフォントの色も変更しています。

プロパティ

(5)「解除」のコマンドボタンを設置します。「抽出」と同じ方法です。

  • オブジェクト名:Cmd2
  • Caption:解除
コマンドボタン・解除

オプションボタンを3つ設置します。

(6)リボン [ 開発 ] > [ コントロール ] グループ > [ 挿入 ] > [ ActiveXコントロール ] > [ オプションボタン ]をクリックします。

オプションボタン

(7)オプションボタンのプロパティを設定します。

  • 「含む」のオブジェクト名:op1
  • 「で始まる」のオブジェクト名:op2
  • 「で終わる」のオブジェクト名:op3
コマンドボタンとオプションボタン

フィルターの対象となるフィールドの設定です。セルA2にデータの入力規則を設定します。

(8)リボン [ データ ] > [ データツール ] グループ > [ データの入力規則 ] を選択します。

設定タブ

  • 入力の種類:整数
  • データ:次の値の間
  • 最小値:1
  • 最大値:4
データの入力規則

エラーメッセージ

  • スタイル:停止

タイトルとエラーメッセージは好みで変えてください。

データの入力規則

サンプルコード

引数を使った例です。

コマンドボタン「抽出」

(1)リボン [ 開発 ] > [コントロール ] グループ > [ デザインモード ] を選択します。

(2)コマンドボタン「抽出」をダブルクリックします。

コマンドボタン「抽出」
Private Sub Cmd1_Click()
    Dim mName As String
    Dim cNo As Long
    
    mName = Range("B2")
    cNo = Range("A2")
    
    If cNo = 0 Then
        MsgBox "セルA2に1~4の数字を入力してください", vbCritical
        Exit Sub
    End If
    
    Call Chushutu(cNo, mName)
End Sub

列番号の変数「cNo」はあえてLongを使っています。

コマンドボタン「解除」

(1)リボン [ 開発 ] > [コントロール ] グループ > [ デザインモード ] を選択します。

(2)コマンドボタン「解除」をダブルクリックします。

Private Sub Cmd2_Click()
    Call Kaijo
End Sub

標準モジュール

標準モジュールを挿入します。

抽出

抽出の例です。

Sub Chushutu(ByVal cN As Long, mN As String)
    Dim rCount As Long

    With ActiveSheet
        Select Case True
            Case .op1
                Range("A4").AutoFilter cN, "*" & mN & "*"
            Case .op2
                Range("A4").AutoFilter cN, mN & "*"
            Case .op3
                Range("A4").AutoFilter cN, "*" & mN
        End Select
    End With
    
    rCount = Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeVisible).Count
    If rCount = 4 Then
        ActiveSheet.AutoFilterMode = False
        MsgBox "対象データはありません", vbInformation
        Exit Sub
    End If
    MsgBox rCount - 4 & "件です。", vbInformation
End Sub

Autofilterメゾットの基本です。

セル範囲.AutoFilter 各種引数:=値

抽出の例では、引数の書き方を省略しています。

以下はAutofilterメゾットの引数です。

引数説明
Fieldフィルターの対象となるフィールド番号。整数で指定します。一番左が1です。
Criteria1抽出条件
Operatorフィルターの種類。XlAutoFilterOperator の定数で指定します。
Criteria22番目の抽出条件
VisibleDropDownオートフィルターの矢印の表示。True:表示、False:非表示

解除

解除の例です。

Sub Kaijo()
    ActiveSheet.AutoFilterMode = False
End Sub

使い方:抽出条件とフィールドの選択可能なオートフィルターの使い方

-Excel
-

© 2021 オフィスのQ&A