この記事では 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”) と書きます。セル番地をアルファベットで指定するときは “” で囲むのを忘れないようにしましょう。
コメント
初めてコメントいたします。
仕事で表示/非表示を切り替えるマクロを探しており、
こちらのページにたどり着きました。
「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