『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

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

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

【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

Hide_Show_Row_1() を最初に実行すると 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