Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 抽出に利用しているフィールド名を取得するExcelマクロ

抽出に利用しているフィールド名を取得するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

たくさんの列・フィールドが存在しているワークシートで、オートフィルター機能を駆使してデータの抽出を行っていると、どのフィールドで絞り込みを行っているのか、わかりにくくなることがあります。

そんなときに使うための、フィルターをかけているフィールド名を調べるExcelマクロを作ってみました。

[スポンサードリンク]

フィルターをかけているフィールド名を取得するサンプルマクロ

フィルターのかかっているワークシートがアクティブな状態で以下のマクロを実行すると、フィルターに利用しているフィールドの名前がメッセージボックスに表示されます。

Sub 絞り込みを行っているフィールド名を調べる()

 Dim aft As AutoFilter
 Dim fld As String ' フィールド名
 Dim i As Long

 If Not ActiveSheet.FilterMode Then Exit Sub

 Set aft = ActiveSheet.AutoFilter
 For i = 1 To aft.Filters.Count
  If aft.Filters(i).On Then
   fld = fld & _
    aft.Range.Cells(1, i).Value & vbCrLf
  End If
 Next i

 MsgBox fld

End Sub

サンプルマクロの解説

ワークシート上のオートフィルターを表すAutoFilterオブジェクトを、オブジェクト変数・aftにセットしておいて、
  Set aft = ActiveSheet.AutoFilter

ワークシート上にフィルターをかけるための[▼]ボタンが、表示されているフィールド・列の数だけFor~Nextループを回して、
 For i = 1 To aft.Filters.Count

実際にフィルターがかけられている列だったときに、その列名を変数・fldに格納しています。
  If aft.Filters(i).On Then
   fld = fld & _
    aft.Range.Cells(1, i).Value & vbCrLf

フィールド名・列名を簡単に取得できるプロパティが、Filterオブジェクトに用意されていても良さそうに感じるかもしれませんが、

抽出に利用しているフィールド名を取得するExcelマクロ

Excelは元来データベースソフトではなく表計算ソフトですから、そのようなプロパティは用意されていません。

そのため、AutoFilterオブジェクトのRangeプロパティで、

抽出に利用しているフィールド名を取得するExcelマクロ

オートフィルターの対象となっているセル範囲を取得して、RangeオブジェクトのCellsプロパティを利用して、フィールド名を取得する「aft.Range.Cells(1, i).Value」というオブジェクト式にしています。

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 抽出に利用しているフィールド名を取得するExcelマクロ

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.