シート非表示ソフトのVBAコード Gotoでジャンプ移動

sheethiddeneyecatch003

シート非表示VBAソフトのVBAコードを作成します。各条件をGotoステートメントを使って分岐処理を行います。コードの進行が複雑になりますので慎重に作業を進めます。

今回は、「エクセルシート非表示VBAソフト」のコードの紹介を行います。

こんにちは、じゅんぱ店長(@junpa33)です。

ここでのキーとなるコードはGotoです。

が、Gotoステートメントは、ダークサイドとして、多用するとコードの流れが複雑で訳が分からなくなってしまいます。

Gotoの使用は、コードの可読性も悪くなりバグの発生や発見についても非常に不利に働くことになります。

そのため、あまり多用しないようにするというのが共通認識です。

今回は敢えて作ってみました。Gotoステートメントの多用でコードがビュンビュン飛んでいます。If条件文で分岐もいっぱいです。

何の参考にもならないという話もありますが、そこはチャレンジ精神で作ってみました。

基本、Gotoを標準モジュールで使う場合は、コードを書くごとに「ステップイン」でチェックしながら行うのが吉です。

(今回の場合はイベント(ユーザーフォームモジュール)ですので使えません。)

シート非表示VBAソフト作成の方針

sheethiddenp022
  1. 条件分岐のコードはGotoでジャンプで移動処理していきます。
  2. ソフトの起動にはイベントで鍵を付けます。
  3. 今あるエクセルファイルにも導入できるようなアドオン的ソフトにします。
  4. 多種多様なシート名にも使えるようにします。
  5. 「シート上から非表示解除できるタイプと出来ないタイプ」の2種類の非表示にも対応します。
  6. ユーザーフォームからの操作で、VBAコードの記述はフォームモジュールだけにします。
  7. コンパクトに納めるため、このソフト用のための、新たなシート、標準モジュールは使いません。

ユーザーフォームの設置とコントロールの配置

sheethiddenp023

シートの非表示を行なうのに、ユーザーフォームを使用します。

ユーザーフォームの配置

このユーザーフォームを作ります。

sheethidden007

ユーザーフォーム全体にコントロールの「フレーム」を敷いています。

userformeyecatch ユーザーフォームの挿入と表示は簡単 エクセルVBA

コントロールの配置とプロパティ

sheethidden008
userformcommdeyecatch コマンドボタンをユーザーフォームに設置する

他にチェックボックスの名称「強化Ver.」はラベルで作成しています。

UserForm
sheethidden009
①Frame1
sheethidden010
④CheckBox
sheethidden011
オブジェクト名 シート表示オブジェクト名 Frame1
Caption (空欄)
オブジェクト名 強化保護
Caption (空欄)
②コマンドボタン
sheethidden012
③トグルボタン
sheethidden006b1-18
オブジェクト名 非表示シート名
Caption 非表示シート名
オブジェクト名 表示操作
Caption 非表示OFF

Gotoステートメントで非表示の実行コードを作成

sheethiddenp024

ユーザーフォームモジュールへイベントコードを記述していきます。

変数の宣言

記述の先頭で、宣言セクションで変数の宣言を行います。変数をモジュールレベルとします。

VBA
Option Explicit

    Dim UVS, ANSa, ANSb, ANSc, ANSd, MsUV As Variant
    Dim FL, key1 As Boolean
    Dim TYPa, TYPb As String

変数の宣言をする場所で、変数の有効範囲を替えることが出来ます。

こちらの記事を参考にしてください。

vbasengeneyecatch 宣言方法で変数の適用範囲を変える エクセルVBA

Frame1のイベントコード

「Frame1」がダブルクリックされたときにイベントを発生させます。

クリックされたときにkey1をTrueにします。

フレーム部分をダブルクリックすることで、このソフト(VBAマクロ)のロックが解除されて、プログラムが実行されるようにします。

VBA
Private Sub Frame1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        key1 = True
End Sub

CheckBox「強化保護」のイベントコード

クリックをしたかどうかの条件分岐を行います。

key1がTrueでなければ、プロシージャーを実行しません。

VBA
Private Sub 強化保護_Click()
        TYPa = ""
        TYPb = ""
        If key1 = False Then
            強化保護.Value = False
            Call Me.ロック解除メッセージ
            Exit Sub
        Else
            If 強化保護.Value = True Then
                TYPa = xlSheetVeryHidden
                TYPb = xlSheetVisible
            Else
                TYPa = xlSheetHidden
                TYPb = xlSheetVisible
            End If
        End If
End Sub
VBA
Sub ロック解除メッセージ()
    MsgBox "操作にはロック解除が必要です。", vbOKOnly + _
                vbInformation, "シート表示"
End Sub

コマンドボタン「非表示シート名」のイベントコード

「非表示シート名」ボタンを押した時の動作をコード化します。

非表示には「VeryHidden」と「Hidden」の2種類がありますのでその両方で調べます。

ここでは「Frame1」のイベントの発生とは無関係にします。

VBA
Private Sub 非表示シート名_Click()
    Dim ws As Worksheet
        MsUV = ""
        UVS = ""
        For Each ws In Worksheets
            If ws.Visible = xlSheetHidden Or ws.Visible _
                        = xlSheetVeryHidden Then
                MsUV = ws.Name
                UVS = UVS & MsUV & " を非表示中です。" & vbCrLf
            End If
        Next ws
        If UVS = "" Then
            UVS = "非表示中のシートはありません。"
        End If
        MsgBox UVS, vbOKOnly + vbInformation, "非表示チェック"
End Sub

「For Each~Next」の使い方については、こちらを参考にしてください。

vbadoloopeyecatch VBA 回数不定のループ処理はDo LoopとFor Each

「If条件文」の使い方については、こちらを参考にしてください。

vbaifjyokeneyecatch If条件文のVBAコードの組み方。条件の絞り方を最速理解

トグルボタン「表示操作」のイベントコード

少々長くなりますので、順番に区切って説明していきます。

ソフトの操作をロック解除する部分

vbacalleyecatch 部品化プロシージャーでCallステートメントは必須
VBA
Private Sub 表示操作_Click()
    Dim mymsg1, mytitle1 As String
    Dim ws As Worksheet
    Dim i, s, Va, Vb As Long
    Dim WSN(1 To 500)
'プログラムの操作ロック解除
        If key1 = False Then
            Call Me.ロック解除メッセージ
            Exit Sub
        End If


「Frame1」のイベントが発生(key1がTrueになる)しなければこのプロシージャーを終了させます。

ロック解除できない場合は、メッセージを表示します。

表示シートと非表示シートの枚数を数える部分

vbadoloopeyecatch VBA 回数不定のループ処理はDo LoopとFor Each

「表示シート」数と「非表示シート」数をカウントします。

「Va」は表示シートの枚数。「Vb」は非表示シートの枚数

VBA
'表示・非表示シート枚数を数える
        Va = 0
        Vb = 0
        For Each ws In Worksheets
            If ws.Visible = True Then
                Va = Va + 1
            ElseIf ws.Visible = xlSheetHidden Or ws.Visible _
                        = xlSheetVeryHidden Then
                Vb = Vb + 1
            End If
        Next ws

ブックのシート数が1枚の時の処理の部分

シート数が1枚のみ表示のエクセルBOOKの設定の場合、エクセルの仕様で非表示にはできません。

アラートウインドウを出してこのプロシージャーを終了します。

メッセージボックスの使い方については、こちらが参考になります。

vbamsgboxeyecatch メッセージボックス MsgBox実際の使い方を最速に理解
VBA
'ブックのシートが1枚の時の処理
        If Va = Worksheets.Count And Va = 1 Then
                MsgBox "表示シート数が1つでは非表示機能は使えません。" _
                            , vbOKOnly + vbExclamation, "非表示警告"
                シート表示.表示操作 = False
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                key1 = False
                Exit Sub
        End If

シート非表示の最大数に到達した時の処理の部分

「非表示シート」が最大数(全シート数ー1)になった時の処理です。

シート非表示の最大枚数になった時にメッセージを表示して、非表示を解除するか、非表示状態を維持するかの判断を行えるようにします。

VBA
'シート非表示の最大数到達時の処理
        If Worksheets.Count - Vb = 1 Then
                MsgBox "非表示にできる最大シート数に達しました。" _
                    & vbCrLf & "これ以上は不可能です。", vbOKOnly + _
                    vbExclamation, "非表示警告"
                シート表示.表示操作.Caption = "非表示ON"
                シート表示.表示操作.BackColor = &H80000010
                ANSd = MsgBox("非表示を解除しますか?", vbYesNo, "確認")
                If ANSd = vbYes Then
                    For s = 1 To Worksheets.Count
                        Worksheets(s).Visible = True
                    Next s
                    MsgBox "シートはすべて表示します。" & vbCrLf & _
                        "シートの非表示はありません。", vbOKOnly, "非表示"
                    シート表示.表示操作.Caption = "非表示OFF"
                    シート表示.表示操作.BackColor = &H8000000F
                    key1 = False
                    Exit Sub
                Else
                    シート表示.表示操作.Caption = "非表示ON"
                    シート表示.表示操作.BackColor = &H80000010
                    key1 = False
                    Exit Sub
                End If
        End If

強化Ver.のチェックボックスのチェック時の判別コード部分

チェックボックス「強化保護」がクリックされた時、されなかった時のコードです。

チェックボックスがチェック時には「xlSheetVeryHidden」とします。

vbasheethideeyecatch エクセルシートの非表示コードをパスワード管理するVBA
VBA
'強化チェックボックスのチェック判定処理
        If 強化保護.Value = True Then
            TYPa = xlSheetVeryHidden
            TYPb = xlSheetVisible
        Else
            TYPa = xlSheetHidden
            TYPb = xlSheetVisible
        End If

表示操作トグルボタンのONに分岐するコード

トグルボタンのクリックで表示と非表示が実行されます。

非表示強化Verも含めて、条件分岐が多く出てきます。

はじめにトグルボタンを「ON」にした時、「step1」にジャンプします。

VBA
'表示操作トグルボタンの操作「非表示ON」
        If シート表示.表示操作 = True Then
    '非表示するシートを指定するコードへ移動
            GoTo step1

stepAへのジャンプコード

先に「stepA」にジャンプするVBAです。

条件分岐の概念はこのようにしています。

  • ボタンを「非表示ON」
    • 表示・非表示シート数の計算
      1. 非表示枚数の最大数の時の処理
        • 非表示最大数のためプログラム離脱
      2. シート非表示の処理
        1. シート名存在でシート非表示実行へ移る
        2. 入力したシート名が存在しない時の処理
          1. シート名再入力へ
          2. 再入力しないで終了する場合
            • 既に非表示指定したシートがあるかどうか調べる
              1. 既に非表示指定したシートがない
              2. 既に非表示指定したシートがある
vbahairetueyecatch 1次元配列とは。静的配列と動的配列 エクセルVBA VBAGotoeyecatch001 Gotoステートメントでコードをジャンプ!毒と薬の2面性
VBA
'インプットボックスで入力したシート名を非表示処理
stepA:
            Va = 0
            Vb = 0
    '表示・非表示シート数の計算
            For Each ws In Worksheets
                If ws.Visible = True Then
                    Va = Va + 1
                ElseIf ws.Visible = xlSheetHidden Or ws.Visible _
                            = xlSheetVeryHidden Then
                    Vb = Vb + 1
                End If
            Next ws
    '非表示枚数の最大数の時の処理
            If Worksheets.Count - Vb = 1 Then
                MsgBox "非表示にできる最大シート数に達しました。" _
                    & vbCrLf & "これ以上は不可能です。", vbOKOnly _
                    + vbExclamation, "非表示警告"
                シート表示.表示操作.Caption = "非表示ON"
                シート表示.表示操作.BackColor = &H80000010
                key1 = False
    '非表示最大数のためプログラム離脱
                Exit Sub
            End If
    'シート非表示の処理
            FL = False
            For i = 1 To Worksheets.Count
                WSN(i) = Worksheets(i).Name
                If WSN(i) = UVS Then
                    FL = True
    'シート非表示実行へ移る
                    GoTo stepB
                End If
            Next i
    '入力したシート名が存在しない時の処理
            If FL = False Then
                ANSc = MsgBox(UVS & "シートは存在しません!!" _
                        & vbCrLf & " 続けますか?", vbYesNo, "確認")
                If ANSc = vbYes Then
    'シート名再入力へ
                    GoTo step1
    '存在しないシート名指定で、再入力しないで終了する場合
                Else
        '既に非表示指定したシートがあるかどうか調べる
                    For Each ws In Worksheets
                        If ws.Visible = False Then
                            MsUV = ws.Name
                        End If
                    Next ws
        '既に非表示指定したシートがない
                    If MsUV = "" Then
                        シート表示.表示操作 = False
                        シート表示.表示操作.Caption = "非表示OFF"
                        シート表示.表示操作.BackColor = &H8000000F
                        key1 = False
                        Exit Sub
        '既に非表示指定したシートがある
                    Else
                        シート表示.表示操作.Caption = "非表示ON"
                        シート表示.表示操作.BackColor = &H80000010
                        key1 = False
                        Exit Sub
                    End If
                End If
            End If

step1へのジャンプコード

トルグボタン「非表示ON」で最初にこの「step1」に飛んできます。

インプットボックスを表示して非表示にするシート名を入力、取得します。

シート名入力が「空欄」の場合、プログラムを終了するか、再度入力ボックスを表示するかを選択する。

シート名入力を「キャンセル」の場合、プログラムを離脱する。

シート名が入力されている場合、「stepA」にジャンプします。

vbainputboxeyecatch 2つのインプットボックス。関数とメソッド、特徴を生かした使い分け
VBA
'非表示シート名をインプットボックスから指定する
step1:
            mymsg1 = "非表示にするシート名を入力"
            mytitle1 = "非表示シート"
            UVS = Application.InputBox(prompt:=mymsg1, _
                        Title:=mytitle1, Type:=2)
            If UVS = "" Then
                ANSa = MsgBox("終了しますか?", vbYesNo, "確認")
                If ANSa = vbYes Then
                    シート表示.表示操作 = False
                    シート表示.表示操作.Caption = "非表示OFF"
                    シート表示.表示操作.BackColor = &H8000000F
                    key1 = False
    '非表示作業を終了する
                    Exit Sub
                Else
    '思い直して非表示設定を行なう
                    GoTo step1
                End If
    '非表示シート名入力をキャンセルする
            ElseIf UVS = False Then
                シート表示.表示操作 = False
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                key1 = False
                Exit Sub
            Else
    '入力したシート名のシートを非表示処理コードへ移動
                GoTo stepA

stepBへのジャンプコード

指定されたシート名を非表示実行します。この時、強化保護かどうかは変数「TYPa」に値が代入されています。

非表示作業を続ける場合は「step1」にジャンプする。

非表示作業を続けない場合は、プログラムを終了する。

VBA
'シート非表示と次の処理の分岐
stepB:
                Worksheets(UVS).Visible = TYPa
                MsgBox UVS & "シートを非表示にしました!!", _
                            vbOKOnly, "非表示"
                ANSb = MsgBox("他に非表示にするシートがありますか?" _
                    & vbCrLf & " 続けますか?", vbYesNo, "確認")
                If ANSb = vbYes Then
    '次の非表示シートを指定する
                    GoTo step1
                Else
                    シート表示.表示操作.Caption = "非表示ON"
                    シート表示.表示操作.BackColor = &H80000010
                    key1 = False
    '更に非表示はせずに終了する
                    Exit Sub
                End If
            End If

表示操作トグルボタンのOFFに分岐するコード

トグルボタンを「OFF」にすることで、非表示に設定されたシートはすべて非表示解除されます。

VBA
'表示操作トグルボタンの操作「非表示OFF」
        ElseIf シート表示.表示操作 = False Then
                For s = 1 To Worksheets.Count
                    Worksheets(s).Visible = True
                Next s
                MsgBox "シートはすべて表示します。" & vbCrLf & _
                "シートの非表示はありません。", vbOKOnly, "非表示設定"
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                key1 = False
        End If
End Sub

ユーザーフォームを表示するVBA

sheethiddenp025

ユーザーフォームを表示するスイッチとなるコードを、「Sheet1」のシートモジュールと「ThisWorkbook」のブックモジュールに記述します。

シートモジュールに記述するコード

Sheet1のシートモジュールに記述します。

Bookのシートの表示状態を調べて、トグルボタンの状態を設定します。

VBA
Option Explicit

Private Sub Worksheet_Activate()
    Dim ws As Worksheet
    Dim MsUV As Variant
        If シート表示.Visible Then Exit Sub
            シート表示.Show vbModeless
            For Each ws In Worksheets
                If ws.Visible = xlSheetHidden Or ws.Visible _
                            = xlSheetVeryHidden Then
                    MsUV = ws.Name
                End If
            Next ws
            If MsUV = "" Then
                シート表示.表示操作 = False
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                Exit Sub
            Else
                シート表示.表示操作.Caption = "非表示ON"
                シート表示.表示操作.BackColor = &H80000010
                Exit Sub
            End If
End Sub

ブックモジュールに記述するコード

ThisWorkbookのブックモジュールに記述します。

VBA
Option Explicit

Private Sub Workbook_Open()
    Dim ws As Worksheet
    Dim MsUV As Variant
        If シート表示.Visible Then Exit Sub
            シート表示.Show vbModeless
            For Each ws In Worksheets
                If ws.Visible = xlSheetHidden Or ws.Visible _
                            = xlSheetVeryHidden Then
                    MsUV = ws.Name
                End If
            Next ws
            
            If MsUV = "" Then
                シート表示.表示操作 = False
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                Exit Sub
            Else
                シート表示.表示操作.Caption = "非表示ON"
                シート表示.表示操作.BackColor = &H80000010
                Exit Sub
            End If
End Sub

非表示VBAコード組み立てのまとめ

sheethiddenp026

シートの非表示ソフトを作成しました。

Gotoステートメントを多用しましたので、非常に複雑なコードの流れになりました。

頭の体操的に読み解いていただいても面白いかもです。

ユーザーフォームモジュールに記述したコードの全体

VBA
Option Explicit

    Dim UVS, ANSa, ANSb, ANSc, ANSd, MsUV As Variant
    Dim FL, key1 As Boolean
    Dim TYPa, TYPb As String

Private Sub Frame1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        key1 = True
End Sub

Private Sub 強化保護_Click()
        TYPa = ""
        TYPb = ""
        If key1 = False Then
            強化保護.Value = False
            Call Me.ロック解除メッセージ
            Exit Sub
        Else
            If 強化保護.Value = True Then
                TYPa = xlSheetVeryHidden
                TYPb = xlSheetVisible
            Else
                TYPa = xlSheetHidden
                TYPb = xlSheetVisible
            End If
        End If
End Sub

Sub ロック解除メッセージ()
    MsgBox "操作にはロック解除が必要です。", vbOKOnly + _
                vbInformation, "シート表示"
End Sub

Private Sub 非表示シート名_Click()
    Dim ws As Worksheet
        MsUV = ""
        UVS = ""
        For Each ws In Worksheets
            If ws.Visible = xlSheetHidden Or ws.Visible _
                        = xlSheetVeryHidden Then
                MsUV = ws.Name
                UVS = UVS & MsUV & " を非表示中です。" & vbCrLf
            End If
        Next ws
        If UVS = "" Then
            UVS = "非表示中のシートはありません。"
        End If
        MsgBox UVS, vbOKOnly + vbInformation, "非表示チェック"
End Sub

Private Sub 表示操作_Click()
    Dim mymsg1, mytitle1 As String
    Dim ws As Worksheet
    Dim i, s, Va, Vb As Long
    Dim WSN(1 To 500)
'プログラムの操作ロック解除
        If key1 = False Then
            Call Me.ロック解除メッセージ
            Exit Sub
        End If
'表示・非表示シート枚数を数える
        Va = 0
        Vb = 0
        For Each ws In Worksheets
            If ws.Visible = True Then
                Va = Va + 1
            ElseIf ws.Visible = xlSheetHidden Or ws.Visible _
                        = xlSheetVeryHidden Then
                Vb = Vb + 1
            End If
        Next ws
'ブックのシートが1枚の時の処理
        If Va = Worksheets.Count And Va = 1 Then
                MsgBox "表示シート数が1つでは非表示機能は使えません。" _
                            , vbOKOnly + vbExclamation, "非表示警告"
                シート表示.表示操作 = False
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                key1 = False
                Exit Sub
        End If
'シート非表示の最大数到達時の処理
        If Worksheets.Count - Vb = 1 Then
                MsgBox "非表示にできる最大シート数に達しました。" _
                    & vbCrLf & "これ以上は不可能です。", vbOKOnly + _
                    vbExclamation, "非表示警告"
                シート表示.表示操作.Caption = "非表示ON"
                シート表示.表示操作.BackColor = &H80000010
                ANSd = MsgBox("非表示を解除しますか?", vbYesNo, "確認")
                If ANSd = vbYes Then
                    For s = 1 To Worksheets.Count
                        Worksheets(s).Visible = True
                    Next s
                    MsgBox "シートはすべて表示します。" & vbCrLf & _
                        "シートの非表示はありません。", vbOKOnly, "非表示"
                    シート表示.表示操作.Caption = "非表示OFF"
                    シート表示.表示操作.BackColor = &H8000000F
                    key1 = False
                    Exit Sub
                Else
                    シート表示.表示操作.Caption = "非表示ON"
                    シート表示.表示操作.BackColor = &H80000010
                    key1 = False
                    Exit Sub
                End If
        End If
'強化チェックボックスのチェック判定処理
        If 強化保護.Value = True Then
            TYPa = xlSheetVeryHidden
            TYPb = xlSheetVisible
        Else
            TYPa = xlSheetHidden
            TYPb = xlSheetVisible
        End If
'表示操作トグルボタンの操作「非表示ON」
        If シート表示.表示操作 = True Then
    '非表示するシートを指定するコードへ移動
            GoTo step1
'インプットボックスで入力したシート名を非表示処理
stepA:
            Va = 0
            Vb = 0
    '表示・非表示シート数の計算
            For Each ws In Worksheets
                If ws.Visible = True Then
                    Va = Va + 1
                ElseIf ws.Visible = xlSheetHidden Or ws.Visible _
                            = xlSheetVeryHidden Then
                    Vb = Vb + 1
                End If
            Next ws
    '非表示枚数の最大数の時の処理
            If Worksheets.Count - Vb = 1 Then
                MsgBox "非表示にできる最大シート数に達しました。" _
                    & vbCrLf & "これ以上は不可能です。", vbOKOnly _
                    + vbExclamation, "非表示警告"
                シート表示.表示操作.Caption = "非表示ON"
                シート表示.表示操作.BackColor = &H80000010
                key1 = False
    '非表示最大数のためプログラム離脱
                Exit Sub
            End If
    'シート非表示の処理
            FL = False
            For i = 1 To Worksheets.Count
                WSN(i) = Worksheets(i).Name
                If WSN(i) = UVS Then
                    FL = True
    'シート非表示実行へ移る
                    GoTo stepB
                End If
            Next i
    '入力したシート名が存在しない時の処理
            If FL = False Then
                ANSc = MsgBox(UVS & "シートは存在しません!!" _
                        & vbCrLf & " 続けますか?", vbYesNo, "確認")
                If ANSc = vbYes Then
    'シート名再入力へ
                    GoTo step1
    '存在しないシート名指定で、再入力しないで終了する場合
                Else
        '既に非表示指定したシートがあるかどうか調べる
                    For Each ws In Worksheets
                        If ws.Visible = False Then
                            MsUV = ws.Name
                        End If
                    Next ws
        '既に非表示指定したシートがない
                    If MsUV = "" Then
                        シート表示.表示操作 = False
                        シート表示.表示操作.Caption = "非表示OFF"
                        シート表示.表示操作.BackColor = &H8000000F
                        key1 = False
                        Exit Sub
        '既に非表示指定したシートがある
                    Else
                        シート表示.表示操作.Caption = "非表示ON"
                        シート表示.表示操作.BackColor = &H80000010
                        key1 = False
                        Exit Sub
                    End If
                End If
            End If
'非表示シート名をインプットボックスから指定する
step1:
            mymsg1 = "非表示にするシート名を入力"
            mytitle1 = "非表示シート"
            UVS = Application.InputBox(prompt:=mymsg1, _
                        Title:=mytitle1, Type:=2)
            If UVS = "" Then
                ANSa = MsgBox("終了しますか?", vbYesNo, "確認")
                If ANSa = vbYes Then
                    シート表示.表示操作 = False
                    シート表示.表示操作.Caption = "非表示OFF"
                    シート表示.表示操作.BackColor = &H8000000F
                    key1 = False
    '非表示作業を終了する
                    Exit Sub
                Else
    '思い直して非表示設定を行なう
                    GoTo step1
                End If
    '非表示シート名入力をキャンセルする
            ElseIf UVS = False Then
                シート表示.表示操作 = False
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                key1 = False
                Exit Sub
            Else
    '入力したシート名のシートを非表示処理コードへ移動
                GoTo stepA
'シート非表示と次の処理の分岐
stepB:
                Worksheets(UVS).Visible = TYPa
                MsgBox UVS & "シートを非表示にしました!!", _
                            vbOKOnly, "非表示"
                ANSb = MsgBox("他に非表示にするシートがありますか?" _
                    & vbCrLf & " 続けますか?", vbYesNo, "確認")
                If ANSb = vbYes Then
    '次の非表示シートを指定する
                    GoTo step1
                Else
                    シート表示.表示操作.Caption = "非表示ON"
                    シート表示.表示操作.BackColor = &H80000010
                    key1 = False
    '更に非表示はせずに終了する
                    Exit Sub
                End If
            End If
'表示操作トグルボタンの操作「非表示OFF」
        ElseIf シート表示.表示操作 = False Then
                For s = 1 To Worksheets.Count
                    Worksheets(s).Visible = True
                Next s
                MsgBox "シートはすべて表示します。" & vbCrLf & _
                "シートの非表示はありません。", vbOKOnly, "非表示設定"
                シート表示.表示操作.Caption = "非表示OFF"
                シート表示.表示操作.BackColor = &H8000000F
                key1 = False
        End If
End Sub

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min