スポンサーリンク
前回の記事で、Excelシートの行や列をグループ化するっていうのを扱った。
今回は、そのグループ化を、複数同時に自動化してやる方法を扱う。
前半ではExcelの標準機能を紹介するけど、正直そんなにオススメしない。
後半で、マクロを使ったやり方を述べるので、そちらを見ていただいたほうが良いかなと。
アウトラインの自動作成とかいう機能
前回サンプルで使ったExcelシートが下図のものだけど、背景色が緑・朱色のセルには計算式が入っているわけね。
そしてこの表を、前回は何度か「グループ化」の処理を掛けて折りたたみとかやってみたわけだけど、今度はちょっと別の方法でやってみる。
この表のC列~L列を選択してから、
→グループ化
→アウトラインの自動作成
とやってみよう。
すると、文字通り自動的に、階層構造を付けたグループ化が行われる。
これは、背景色が緑・朱色の列、すなわちE・H・K・L列に計算式が入ってるから、それらはグループ化で畳み込んで良い列なのだと自動判別されるってことね。
じゃあそれらの列に計算式が入ってなかったらどうなるか。
その状態で「アウトラインの自動作成」をしても、「アウトラインを作成することができません。」とエラーが出るだけだ。
計算式が入ってないから、アウトラインの自動作成をするための判定ができないということだ。
自動グループ化のマクロ
ここまで書いたが、この「アウトラインの自動作成」機能は、こういう風によく分からん自動判定をExcelにしてもらわないといけなくて、ややこしいから私は全然使ってない。
ならわざわざ紹介するなって話ではある。
でも実務で、この「アウトラインの自動作成」で解決できそうで出来ないことをやりたいことが、たまにある。
上図では3月分までしか列がなかったが、下図のように12月分までとか、凄く横に広いExcelシートをもらうこともある。
(そもそもそんな横に長いシートを作ることが好ましくないが、その辺は置いといて)
で、ここまで横に長いシートだと、AF列とかAI列とかの、朱色で示した金額の列だけを表示するようグループ化したいということになる。
でも計算式が入ってなかったら、先述のアウトライン自動作成はできない。
そういう場面がたまにあるので、私は下記のようなマクロを使っている。
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 |
Sub specificColumnsGrouping() '一定列数ごとに列をグループ化 Dim num As Variant Dim c As Long Dim endC As Long 'Application.InputBoxの主なType '0:数式 '1:数値 '2:文字列 '8:セル参照 num = Application.InputBox("選択セルから何列おきに列をグループ化しますか?", _ Title:="グループ化する列数", Default:=3, Type:=1) If num < 1 Then Exit Sub '選択された範囲の、最初と最後の列番号 c = ActiveCell.Column endC = Selection(Selection.Count).Column On Error Resume Next Application.ScreenUpdating = False '描画停止 Do Until c >= endC Cells(1, c).Resize(1, num).EntireColumn.Group 'グループ化 c = c + num + 1 'グループ化する列数を加算 Loop Application.ScreenUpdating = False '描画再開 End Sub |
そう多用するマクロでもないだろうけど、もしよく使うという場合は個人用マクロブックに組み込むと良いだろう。
動作イメージ
ソースコード自体の解説も、とりたててすることは無いけど、動作イメージだけ述べておく。
たとえば今回の表では、C列から始まって単価・数量・金額と3項目ずつが繰り返されるわけだ。
その場合、
- 起点(1月)のC列~終点(12月)のAL列を選択した状態でマクロを起動する。
- するとメッセージが出て、数字を入力するよう促される。
- で、「単価」「数量」の2項目をそれぞれ非表示にするグループ化をやりたいわけなので、メッセージには「2」を入力する。
- そうすると、目的の通りに自動グループ化がされるというわけ。
という感じ。後はその動画で締めます。
金額の列だけに折りたたまれるアウトライン構造ができるのが、分かっていただけるかと。
スポンサーリンク