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