目的の行以外を非表示にする方法
目的の行以外を、マクロで非表示にする方法を考えてみました。
例えばA~L列までのうち、B列とE列とI列だけを残し、他の列を非表示にしたい
場合について。
マクロの記録などを用いると簡単に、このようなコードを書くことが出来ます。
Sub ColumnHide() Range("A:A,C:D,F:H,J:L").EntireColumn.Hidden = True End Sub
これはこれで良いのですが、個人的には不満があります。なぜならこのコードは、
残したくない列を明示しているため、どの列を残したいかをコードから直接読み取る
ことが出来ないからです。
そこで、このように変更してみました。
Sub ColumnHide() Dim i As Long Range("B:B,E:E,I:I").EntireColumn.Hidden = True For i = 1 To 12 Columns(i).Hidden = Not Columns(i).Hidden Next i End Sub
変更後の場合、まず一旦、残しておきたい列を隠します。欲しい結果と正反対の
状態を作るわけです。そして次に、対象範囲の列全てについて、表示/非表示の
状態を反転させます。
Columns(i).Hidden = Not Columns(i).Hidden
Columns(i).Hiddenは True か False の二つしかありませんから、頭に Not を付ける
ことで、現状の正反対の結果を得ることが出来るわけです。
このようにして、目的の列をコード内で確認しつつ、欲しい結果を得ることができ
ました。ところで、同じ理屈で言えば、以下のコードでもOKです。
Sub ColumnHide() Range("A:L").EntireColumn.Hidden = True Range("B:B,E:E,I:I").EntireColumn.Hidden = False End Sub
先ほどのコードでは、既に非表示の列まで、強制的に掘り起こされてしまいます。
コード内で直感的に確認できるという点においては、こちらの方が良いかもしれ
ませんが、今回は Not による状態の反転を紹介したかったので、大目に見ていた
だければ幸いです。
参考まで。