Excel VBA でオートフィルターのドロップダウン矢印を個別に制御する方法【サンプルコード付き】

目次

概要

本記事では、Excel VBA の VisibleDropDown 引数を利用し、列ごとのフィルター矢印(▼アイコン)を非表示または再表示する手順を解説いたします。不要な列で矢印を隠すことで、ユーザー操作を限定し、シートの誤操作を防止できます。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
データ範囲F5:I14 に見出し行を含む表が配置されている想定
マクロ設置先標準モジュール

サンプルコード(VBA)

Sub HideFilterArrows()

    Dim filterRange  As Range   ' フィルター対象範囲
    Dim colIndex     As Long    ' ループ用カウンター
    Dim ws           As Worksheet
    
    Set ws = ActiveSheet
    Set filterRange = ws.Range("F5:I14")          ' 見出し行を含む範囲を指定

    '----- すべての列で矢印を非表示 -----
    With filterRange
        For colIndex = 1 To .Columns.Count
            .AutoFilter Field:=colIndex, VisibleDropDown:=False
        Next colIndex
        
        '----- 特定列(例:2 列目)だけ抽出条件を設定し矢印を表示 -----
        .AutoFilter Field:=2, Criteria1:="Shizuoka", VisibleDropDown:=True
    End With

End Sub

コード解説

説明
9–10filterRange に見出し行を含むデータ範囲を設定します。開始セルは業務に合わせて変更してください。
14–16ループで各列を処理し、VisibleDropDown:=False を指定して矢印を非表示にしています。
19Field:=2(2 列目)に対する抽出条件を指定し、VisibleDropDown:=True で該当列のみ矢印を表示しています。

応用例

目的実装のヒント
既存のフィルターをすべて解除したいfilterRange.AutoFilter と引数なしで呼び出すと抽出条件のみ解除できます。
すべての矢印を再表示したい再ループで VisibleDropDown:=True を指定するか、ws.AutoFilterMode = False でフィルター自体を無効化します。
3 列目と 4 列目だけ矢印を残したいループ内で If colIndex = 3 Or colIndex = 4 Then などの条件分岐を追加してください。

よくある質問

質問回答
矢印を非表示にした列でも VBA で抽出は可能ですか。はい。VisibleDropDown は表示制御のみであり、コードでの抽出設定に制限はございません。
ListObject(テーブル形式)でも機能しますか。テーブルの .RangefilterRange に指定すれば同じ手順で操作できます。

まとめ

VisibleDropDown を活用すると、列ごとにフィルター矢印の表示・非表示を柔軟にコントロールできます。まずはサンプルコードを実行し、対象列以外の矢印が消えること、そして抽出条件を設定した列だけ再表示されることをご確認ください。シート保護やユーザーインタフェースの簡素化にぜひお役立てください。

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

この記事を書いた人

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

目次