【VBA】Hiddenプロパティで行や列の表示と非表示を切り替える

 この記事では VBA の Hiddenプロパティ を使って、行や列の表示/非表示を切り替える 方法を説明します。

【VBA】Hiddenプロパティ

 一例として、ワークシートの 3 行目の表示/非表示を切り替えるマクロを作成してみます。まずは If ステートメントを使った記述を見てみましょう。

'[VBA] 3行目の表示/非表示を切り替える
Sub Hide_Show_Row_1()
  If Rows(3).Hidden = False Then
    Rows(3).Hidden = True
  Else
    Rows(3).Hidden = False
  End If
End Sub

 最初に実行すると 3 行目が非表示になって、もう1度実行するとまた表示されます。Hidden プロパティに True が入っているとオブジェクトを非表示状態に、False が入っていると表示状態にするのです。このマクロは Not 演算子を使って次のように書き換えることができますよ。

'[VBA] 3行目の表示/非表示を切り替える
Sub Hide_Show_Row_2()
  Rows(3).Hidden = Not Rows(3).Hidden
End Sub

 Not 演算子は False を True に、True を False に変えてしまう「論理否定演算子」とよばれるものです。現在 3 行目が表示されていたら、

Rows(3).Hidden

には False が入っているはずなので、

Not Rows(3).Hidden

はその反対の True です。これを代入して状態を反転させているのです。ついでに A 列の表示/非表示を切り替えるマクロも載せておきます。

'[VBA] A列の表示/非表示を切り替える
Sub Hide_Show_Row_3()
  Columns("A").Hidden = Not Columns("A").Hidden
End Sub

 A 列を参照するときは Columns(1) か Columns(“A”) と書きます。セル番地をアルファベットで指定するときは “” で囲むのを忘れないようにしましょう。

コメント

  1. 谷 賢一 より:

    初めてコメントいたします。
    仕事で表示/非表示を切り替えるマクロを探しており、こちらのページにたどり着きました。
    「A 列の表示/非表示を切り替えるマクロ」を「A:C」に変更して、便利に使用させていただいています。
    ありがとうございます。
     
    厚かましいのは承知の上ですが、1点だけ不自由に感じていることがあるので解決策があれば教えていただきたいと思い、ご連絡いたしました。上記のマクロを設定し、シートを保護するとマクロが実行できません。
    「実行時エラー 1004
    RangeクラスのHiddenプロパティを設定できません。」
    とエラーが出ます。シートの保護で、許可する操作は以下の3つです。
    ・ロックされたセル範囲の選択
    ・ロックされていないセル範囲の選択
    ・オブジェクトの編集(挿入した画像に上記マクロを設定しているため)
    A~C列は保護の対象からは外しています。
     
    マクロは超初心者で、他の方が作られたものをコピーして使用するくらいしかできません。
    解決策があれば、ご教示いただけないでしょうか。
    勝手なお願いで恐縮ですが、何卒よろしくお願い申し上げます。

    • こばと より:

       シートを保護すると、マクロを使ってシートの内容を変更することも拒否されます。保護されたシートでマクロを実行するためには、マクロの冒頭で Unprotect メソッドで保護を外して、最後の行で Protect メソッドで再びシートを保護します。以下のコードを使ってみてください。
      --------------------
      Sub HideShowRow()
       ActiveSheet.Unprotect
       Columns(“A:C”).Hidden = Not Columns(“A:C”).Hidden
       ActiveSheet.Protect
      End Sub
      --------------------

    • こばと より:

       先ほどの返信に載せたコードで、Protectメソッドの「オブジェクトの編集」を有効にするオプション (DrawingObjects:=False) を付け忘れていました。正しくは以下のコードになります。申し訳ありませんでした。
      --------------------
      Sub HideShowRow()
       ActiveSheet.Unprotect
       Columns(“A:C”).Hidden = Not Columns(“A:C”).Hidden
       ActiveSheet.Protect DrawingObjects:=False
      End Sub
      --------------------

  2. あとりえこばと より:

    【AI解説】VBAのHidden

    [ChatGPT] VBAのHidden(非表示)は、オブジェクト(ワークシート、ワークブック、ウィンドウなど)をユーザーから見えないようにするための設定です。オブジェクトを非表示にすることで、裏で処理を行ったり、ユーザーには見せたくない情報を隠したりすることができます。以下では、VBAでオブジェクトを非表示にする方法について解説します。まず、VBAではいくつかのオブジェクトを非表示にすることができますが、よく使われるのは以下のオブジェクトです。
     
    ワークシートの非表示:ワークシートを非表示にすることで、ユーザーには表示されずに裏で処理を行うことができます。
     
    ワークブックの非表示:ワークブックを非表示にすることで、Excelアプリケーションが表示された状態でも、ユーザーには見えないようになります。
     
    ユーザーフォームの非表示:VBAのユーザーフォームを非表示にすることで、ユーザーには表示されずに裏で処理を行うことができます。
     
     以下に、それぞれのオブジェクトを非表示にする方法を示します。

     ワークシートの非表示:Worksheets(“Sheet1”).Visible = False

     上記の例では、”Sheet1″という名前のワークシートを非表示にしています。VisibleプロパティをFalseに設定することで、非表示にすることができます。ワークシートを再度表示するには、VisibleプロパティをTrueに設定します。

     ワークブックの非表示:ThisWorkbook.Windows(1).Visible = False

     上記の例では、現在のワークブックの1つ目のウィンドウを非表示にしています。Windowsコレクションを使用してウィンドウを指定し、VisibleプロパティをFalseに設定することで、ワークブックを非表示にすることができます。

     ユーザーフォームの非表示:UserForm1.Hide
     
     上記の例では、”UserForm1″という名前のユーザーフォームを非表示にしています。Hideメソッドを使用することで、ユーザーフォームを非表示にすることができます。ユーザーフォームを再表示するには、Showメソッドを使用します。
     
     注意点として、非表示にしたオブジェクトはVBAコードからアクセス可能ですが、ユーザーには表示されません。また、非表示にしたオブジェクトは、表示状態のまま保存されるため、次回開いた際にも非表示のままです。以上が、VBAのHidden(非表示)についての基本的な解説です。これを活用することで、ユーザーに見えない処理や情報の保護を行うことができます。

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