行や列を非表示にする方法
データを見る際に邪魔な部分や印刷したくない部分などを、表示させたくないことがあります。
そのような場合に行や列を非表示にするには2つの方法があります。
1つはグループ化です。表示と非表示を頻繁に切り替えるのであればExcel上でも操作しやすいグループ化の方が使い勝手がいいです。グループ化については「グループ化の設定と解除」に詳細を書いていますのでそちら参照してください。
もう1つはホームタブ→書式→非表示/再表示 での行や列の非表示です。
この非表示をVBAで行うにはHiddenプロパティを利用します。ここではHiddenプロパティについて説明します。
Hiddenプロパティ
Hiddenプロパティは行または列の表示と非表示を切り替えることができます。
セル範囲を指定することで行と列を同時に非表示にすることが可能です。
行単位または列単位で設定します。
構文
1 |
Rangeオブジェクト.Hiddenプロパティ |
Rangeオブジェクトには表示または非表示にしたい行範囲または列範囲またはセル範囲を指定します。
セル範囲を指定した場合は、そのセル範囲の行と列の表示と非表示が切り替わります。
表示と非表示の切り替え関数
以下の関数は引数で指定されたセル範囲や行範囲や列範囲の表示と非表示を切り替えます。
引数にはRangeオブジェクトを渡します。
関数内部の処理ですが、引数のRangeオブジェクトには上記の通り、セル範囲や行範囲や列範囲が渡されるため、それらに対応するようにしています。
行全体はRowsプロパティ、列全体はColumnsプロパティで表します。これらの2つのプロパティはRangeオブジェクトを返すため、そこにHiddenプロパティを利用することが出来ます。
9行目から16行目は、行と列のどちらが選択されているのかを判定しています。
例えばRange(“A:A”)と指定されている場合はA列が選択されていることになり、A1セルからA最終行セルまでがセル範囲になります。言い方を変えると、列が選択されているということはその列の全ての行が選択されていると判定できます。そこでRange(“A:A”).Rows.Countプロパティでシートの最大行数を取得し、それが引数と一致しているかどうかで列が選択されているのかを判定しています。行も同様です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Sub SetHidden(r As Range) Dim iRowMaxFlg As Boolean '// 最大行数指定フラグ(True:最大行数が指定されている、False:されていない) Dim iColMaxFlg As Boolean '// 最大列数指定フラグ iRowMaxFlg = False iColMaxFlg = False '// 列が選択されている場合(最大行数が指定されている) If (Range("A:A").Rows.Count = r.Rows.Count) Then iRowMaxFlg = True End If '// 行が選択されている場合(最大列数が指定されている) If (Range("1:1").Columns.Count = r.Columns.Count) Then iColMaxFlg = True End If '// 全セル指定の場合は全ての行と列の表示と非表示を切り替える If (iRowMaxFlg = True) And (iColMaxFlg = True) Then r.Rows.Hidden = Not r.Rows.Hidden r.Columns.Hidden = Not r.Columns.Hidden '// 列指定の場合は列の表示と非表示を切り替える ElseIf (iRowMaxFlg = True) Then r.Columns.Hidden = Not r.Columns.Hidden '// 行指定の場合は行の表示と非表示を切り替える ElseIf (iColMaxFlg = True) Then r.Rows.Hidden = Not r.Rows.Hidden '// セル範囲指定の場合は指定行と指定列の表示と非表示を切り替える Else r.Rows.Hidden = Not r.Rows.Hidden r.Columns.Hidden = Not r.Columns.Hidden End If End Sub |
テストコード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub SetHiddenTest() '// E5の行と列 Call SetHidden(Range("E5")) '// 2行目 Call SetHidden(Range("2:2")) '// C列とD列 Call SetHidden(Range("C:D")) '// A4セルからB5セルの範囲 Call SetHidden(Range("A4:B5")) End Sub |
実行結果
実行前
2行目:E5を非表示
6行目:2行目全体を非表示
9行目:C列とD列を非表示
12行目:A4セルからB5セルの範囲を非表示
再度SetHiddenTest()を実行
非表示だった個所が表示されるように切り替わります。
ちなみに、シート全体を非表示にするとこんな感じになります。
その際は、ホーム→書式→非表示/再表示 で行の再表示と列の再表示を行い、A1セルが表示されますので行は列を右クリックして再表示を行うと、シート全体が再表示されます。