[VBA] 行や列の表示/非表示を切り替えるマクロ

 今回は 行や列の表示/非表示を切り替えるマクロ を書いてみます。

行や列の表示/非表示を切り替えるマクロ

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

 3 行目の表示/非表示を切り替えます

 Sub HideShowRow1()

 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 演算子を使って次のように書き換えることができますよ。

 3 行目の表示/非表示を切り替えます

 Sub HideShowRow2()

  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 列の表示/非表示を切り替えるマクロも載せておきます。

 A 列の表示/非表示を切り替えます

 Sub HideShowRow3()

  Columns("A").Hidden = Not Columns("A").Hidden

 End Sub

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

 ≫ VBA 辞典メニューに戻って他の記事も読んでほしいな~♪

スポンサードリンク
関連コンテンツ

コメント

  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

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください