【Excel×VBA】ドロップダウンリストで表示を切り替える

てちてちエンジニアのおっとーです。

今回はドロップダウンリストから表示エリアを選択すると、
エリアとして事前に決めた行を表示するようなマクロを作っていきます。

この投稿でできるようになること

  • ドロップダウンリストの作成
  • 名前の定義の設定
  • 名前の定義の活用
  • シート操作があった際に、アクションを起こすマクロの作成
  • 余計な部分を表示させない方法の習得

早速やっていきます。

ドロップダウンリスト作成

  1. Excel を開く
  2. B2セルを選択(←どこでも大丈夫です)
  3. データを押下
  4. データの入力規則を押下
  5. 表示された画面の入力値の種類(A)からリストを選択
  6. 元の値(S)に「,(カンマ)」で区切ってドロップダウンの項目を入力
  7. OKを押下

作成が成功していればこのようにドロップダウンリストが作成されているはずです。

表示切替のエリアに色を付ける

この手順は動きの確認をしやすくするためです。

不要であればスキップして問題ありません。

ドロップダウンリストの切り替えによって、
表示したい場所が表示されていて、非表示にしたい場所が非表示になっていることを確認しやすくします。

 

各表示エリアに名前を定義

今回は5~8行目をAのエリアとしたいので、以下のように操作します。

  1. 見出し5-8行目を選択
  2. 数式を押下
  3. 名前の定義を押下
  4. 表示された画面から範囲Sheet設定
  5. 参照範囲が間違ってないことを確認
  6. OKボタン押下
  7. 5-8行目を選択
  8. 画面左上にA5だった部分がAのエリアとなっていることを確認

上の手順をABCそれぞれのエリアに対して行ってください。

ABCのエリアそれぞれに名前の定義ができているかは、
数式名前の管理から確認することができます。

以下の図のようになっていればしっかり設定できています。

ドロップダウンにアクションをつける

ドロップダウンを切り替えたときに、
選択したエリアだけが表示されるようにマクロを組みます。

完成イメージはこんな感じです。

  1. Alt+F11VBEを起動
  2. プロジェクトエクスプローラー(画面左側)からSheet1をダブルクリック
  3. 編集画面左上からWorksheetを選択
  4. 編集画面右上からChangeを選択
  5. Worksheet_SelectionChangeのほうを削除
  6. 以下のコードを記入
  7. コンパイルを実行
  8. VBEを閉じる

手順通りやったけどコンパイルの段階でエラーが出てしまった場合、
記述ミスをしている可能性が高いです。

記述したコードを削除して以下のコードの再貼り付けを試してみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
    '変更された範囲(Target)にB2のセルが含まれていない場合
    If Intersect(Target, Range("B2")) Is Nothing Then
        Exit Sub
    'それ以外の場合
    Else
        'B2の値がCaseの場合
        Select Case Range("B2").Value
            Case "Aを表示"
                'Aの非表示を解除して他を非表示
                Range("Aのエリア").EntireRow.Hidden = False
                Range("Bのエリア").EntireRow.Hidden = True
                Range("Cのエリア").EntireRow.Hidden = True
                
            Case "Bを表示"
                'Bの非表示を解除して他を非表示
                Range("Aのエリア").EntireRow.Hidden = True
                Range("Bのエリア").EntireRow.Hidden = False
                Range("Cのエリア").EntireRow.Hidden = True
                
            Case "Cを表示"
                'Cの非表示を解除して他を非表示
                Range("Aのエリア").EntireRow.Hidden = True
                Range("Bのエリア").EntireRow.Hidden = True
                Range("Cのエリア").EntireRow.Hidden = False
            
        End Select
    End If
End Sub

このように選択したエリアによって表示の切り替えが行えていたらここまで順調にできています。

最後の仕上げ

ちょっと外観が美しくないので、
Cのエリア以降の行を非表示にしていきます。

私の場合17行目ですが、非表示にしたい最初の行を選びます。
そしたらShift+Ctrl+↓で最終行まで一気に選択します。

そしたら見出し部分を選択して非表示を押下します。

続けて、左右幅をそろえていきたいので、
D列以降は非表示にしていきます。

D列を選択して、
Ctrl+Shift+→からの非表示。

最後に見出しを消していきます。

なんかそっけない感じになりましたね。

以上で今回の内容は終了です。

最後に保存します。

 

マクロ有効の拡張子は.xlsmです。

お間違いないように。

コメント

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