【VBAリファレンス|実務向け】第13回 ボタン一つで表示と非表示を切り替える 1/4:実務で使える「UI切り替え」の基本

スポンサーリンク

なぜ「表示・非表示の切り替え」が重要なのか

実務でExcelを扱っていると、情報量が多すぎて「必要なデータだけをパッと見たい」という場面に頻繁に遭遇します。特に住所録や見積書などの帳票類では、基本情報と詳細情報を分けて管理したいケースが多いでしょう。
今回から4回にわたり、ボタン一つで列や行の表示・非表示を切り替える機能を実装します。この技術を習得すれば、ユーザーにとって使いやすい「動的なインターフェース」を構築でき、Excelファイルの利便性が劇的に向上します。

基礎知識:VBAで列を制御する仕組み

Excel VBAで特定の列を非表示にするには、RangeオブジェクトのEntireColumnプロパティとHiddenプロパティを使用します。

・Range(“列番号”).EntireColumn.Hidden = True :対象の列を非表示にする
・Range(“列番号”).EntireColumn.Hidden = False :対象の列を表示する

この「True(真)」と「False(偽)」を切り替えるだけで、表示状態をコントロールできます。

実装の考え方

実務では、現在の状態を判定して「非表示なら表示へ、表示なら非表示へ」というトグル処理(切り替え処理)を実装するのが一般的です。これにより、ボタンを一つ配置するだけで、ユーザーは何度でも表示を切り替えられるようになります。

サンプルプログラム:列の表示・非表示を切り替える

以下のコードは、C列からE列をボタン一つで交互に切り替えるサンプルです。標準モジュールに貼り付けて、シート上のボタンに登録して使用してください。

Sub ToggleColumnVisibility()
    ' 対象となる列範囲を指定(例:C列からE列)
    Dim targetRange As Range
    Set targetRange = Columns("C:E")
    
    ' 現在の表示状態を確認し、反転させる
    ' Hiddenプロパティの値をNotで反転させるのがポイントです
    targetRange.EntireColumn.Hidden = Not targetRange.EntireColumn.Hidden
    
    ' 処理完了後にメッセージを出す必要はありませんが、
    ' 実務では画面更新を止める(Application.ScreenUpdating = False)と
    ' 動作がよりスムーズになります
End Sub

応用・注意点:現場で陥りやすいバグの回避策

1. 対象範囲の誤認:シートのレイアウト変更があった際、コード内の「”C:E”」という指定がずれてしまうことがあります。可能であれば、列を直接指定するのではなく、名前定義やFindメソッドを利用して列を動的に取得する設計にすると、メンテナンス性が向上します。
2. シート保護との兼ね合い:シート保護が設定されている場合、このコードはエラーになります。その場合は、マクロの冒頭で「ActiveSheet.Unprotect」を実行し、処理後に「ActiveSheet.Protect」で再保護をかける記述を追加してください。
3. ユーザーへのフィードバック:非表示にした際、どのデータが隠れているかユーザーが迷わないよう、ボタンのキャプション(ボタン上の文字)を「詳細を表示」「詳細を隠す」と動的に書き換える工夫をすると、より親切なツールになります。

次回は、この仕組みをさらに発展させ、複数の項目を個別に制御する手法を解説します。

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