【VBA】シートの表示/非表示を切り替える:ユーザーフォーム

エクセルマクロ_ユーザーフォームでシート表示非表示を切り替える_アイキャッチ ExcelVBA

ユーザーフォームで、シートの表示・非表示を切り替えるマクロコードをご紹介します。

[Visible] プロパティを使用して、シートの表示・非表示を操作します。
必要に応じて、表示状態を簡単に切り替えることができます。

このページのマクロコードは、コピペで使えます。
ぜひお試しください!

ユーザーフォームを作成して開く

エクセルにコマンドボタンを作成し、ユーザーフォームを開きます。


 

マクロコードを標準モジュール「Module1」に入力します。


Sub ボタン1_Click()
    UserForm1.Show vbModeless
End Sub

 

マクロコードを「Module1」に入力した画面の様子


 

ユーザーフォーム内部にマクロコードを入力する

マクロコードを「UserForm1」に入力します。
なるべくコードが短くなるように努力しました(*’▽’)


Option Explicit

Dim ShtName As String
Dim Buf As Long

Private Sub CommandButton1_Click()
    Buf = 1
    Call update_list
End Sub

Private Sub CommandButton2_Click()
    Buf = 2
    Call update_list
End Sub

Sub main()

Dim MyList() As Variant
Dim i As Integer
Dim TargetCheck As String

    With UserForm1.ListBox1

        '1つだけ選択
        .MultiSelect = fmMultiSelectSingle

        'チェックボックス表示
        .ListStyle = fmListStyleOption
        
        ReDim Preserve MyList(Sheets.Count)

        'シート名を取得
        For i = 1 To Sheets.Count
            'シートの表示、非表示を確認
            If Sheets(i).Visible = True Then
                MyList(i) = Sheets(i).Name
            Else
                MyList(i) = Sheets(i).Name & " 【非表示】"
            End If
        Next i

        'リストボックスに追加
        For i = 2 To UBound(MyList)
            .AddItem MyList(i)
        Next i

    End With

End Sub

Sub update_list()

    ShtName = Replace(UserForm1.ListBox1.Value, " 【非表示】", "")
    Sheets(ShtName).Activate
    
    If Buf = 1 Then
        '再表示
        If Sheets(ShtName).Visible = False Then
            Sheets(ShtName).Visible = True
        End If
    Else
        '非表示
        If Sheets(ShtName).Visible = True Then
            Sheets(ShtName).Visible = False
        End If
    End If
    
    UserForm1.ListBox1.Clear
    Call main

End Sub

Private Sub UserForm_Initialize()
    Call main
End Sub

 

マクロコードを入力する場所「UserForm1」


 

動作

「ユーザーフォームを開く」ボタンをクリックして、ユーザーフォームを起動します。

下図は、ファイル内に非表示シートがない状態でユーザーフォームを起動しています。


 
 

シートを非表示にしたいとき

非表示にしたいシートを選択して、「非表示」ボタンをクリックします。

選択したシートが非表示に切り替わり、ListBoxに【非表示】の文字が即表示されます。


 
 

シートを再表示にしたいとき

再表示したいシートを選択して、「再表示」ボタンをクリックします。

選択したシートが再表示され、ListBoxから【非表示】の文字が即刻消えます。


 

この記事がお役に立ちますと幸いです。
 
・【ExcelVBA】ユーザーフォーム作成の事例まとめ
 

【VBAユーザーフォーム】何ができるの?:使用例34選
...

 

「プログラマーの本気がExcelを覚醒させる 超絶ExcelVBA」
ExcelVBAでワンランクアップできる書籍
具体的で応用が利く技をたくさん掲載