Excelガントチャートのアレンジ:行のグループ化で折りたたむ(VBAマクロも紹介)

ガントチャートアレンジサムネ

この記事では、Excelの行列を折りたたむ機能『グループ化』を使ってガントチャートをアレンジする方法を紹介します。


Excelでオリジナルのガントチャートを作るの記事はこちらを参考にして下さい。

ガントチャートサムネ Excelガントチャート(線表)でスケジュール管理!作成時に役に立つ関数、セルの書式設定

ガントチャートは1次事象 – 2次事象 – 3次事象 とアクションを細分化していけるのが一般的です。

とはいえ、細かく枝分けしすぎると見にくくなると思っています。(多くても3次事象までかなと)

上の関連記事では2次事象までがデフォルトだったので、3次事象までを追加するのと、折りたたみできるようにアレンジしていきます。


~Excelガントチャートの事象追加と折りたたみ~

広告


事象(子、枝)の追加

まずは手動でやっていきましょう。これが元の状態。

スタート


『11行目の下』から『2行』を右クリック 挿入 で追加

行の追加


『11行目をコピー』して、『12行目から1行ずつコピー(今回13行目まで)』

貼り付け
1行ずつコピーする理由

条件付き書式の範囲が乱れるからです。

あとで編集する時にうまく書式が作用しない事があります。


事象レベルがそのままなら、内容を変更して終了です。が、

事象を下げる場合(子を作る)は、以下の作業が必要

事象を下げるため、『C12とC13をインデント』

セルを選択して 右クリックセルの書式設定インデントを1にする

上の事象(親)の日付期間を子から集計

開始日はMin関数を、終了日はMax関数を使います

日付の集計
親事象の書式を設定

『C11~I11を選択し』ホーム条件付き書式新しいルール

条件付き書式2


数式を~ を選択し、設定窓に【=$D11=”期間1″】と入力し、好きな書式を設定しておく

設定数式0

tensen

D6にプルダウンワードの”期間1”を追記し、データ データの入力規制データの入力規制 で元の値をD6まで拡張

プルダウン更新


J11~のチャート部(線表部)の書式も設定します。

プルダウンのD列に”期間1”が選択されれば、先ほどと同じ書式になるようにします。

関数はこちら【=IF($D11=”期間1″,OR(AND($F11>=J$8,$F11<=J$8+$B$4-1),AND($H11>=J$8,$H11<=J$8+$B$4-1),AND($F11J$8+$B$4-1)))】

チャート部の書式変更


11列目をコピーし、1行ずつ書式のみコピーする

そしてできあがり

事象2の書式完了
終了

これで、事象がそのままの場合と事象を下げる場合の追加は完了です。


[ad05]
[ad02]

折りたたみ追加

ガントチャートは、アクションが多くなってくると折りたたんで見やすくしたくなります。

そこで、行のグループ化(列もできます)を使って、その機能を追加します。


まずは1次事象(10列目)より下をグループ化します。

11行目~14行目を選択し、データアウトライングループ化 を選択するか Shift + Alt + →キー

グループ1


左上に『1』が出て、行番号より左に『ー』が現れます。

このどちらかを押すと折りたたまれます。

グループ2
グループ3


グループ化解除のショートカットは Shift + Alt + ←キー

さらに下げた事象がある場合、子だけをグループ化

完成

これでいい感じのガントチャートになってきましたね!!


[ad06]
[ad02]

作業をマクロ化

せっかくなので、行追加の一連の作業をVBAマクロにしましょう。

前提

上で解説した、『条件付き書式』『プルダウン項目追加』『1次事象の折りたたみ』はすでに適用した状態で、行追加のみのマクロです。

コードは、{標準moduleに書くユーザーフォームの呼び出しコード}と{ユーザーフォームに書く実行時のコード}です。

挿入条件を決めるコマンドBOX呼び出しコード
Sub popup()
'ユーザーフォーム(BOX)の召喚 UserForm1.Show
End Sub


コマンドBOXを使った解説は、お手数ですがこちらを参照ください。

おしゃれマクロ作成 ExcelコマンドBOXでワンランク上のマクロ作成+他のソフトにコピーまでしてみる

コマンドボックスのレイアウトです。

コマンドボックス


ユーザーフォーム(コマンドBOX)に書くコードはこちら

コマンドBOXを実行した時のアクションコード
Private Sub UserForm_Initialize()
'リストボックスの設定 UserForm1.Caption = "チャート行の挿入"
End Sub
Private Sub CommandButton1_Click()
'変数の定義と値付け Dim Textbx1 As Long Dim Textbx2 As Long Textbx1 = Me.TextBox1.Text 'Textbox1は何行めに挿入か Textbx2 = Me.TextBox2.Text 'Textbox2は何行追加か Dim Ori As Long Dim St As Long Dim Fn As Long Ori = Textbx1 St = Textbx1 + 1 Fn = Textbx1 + Textbx2
'コマンドボタンを押したらBOXが消える設定をする Unload UserForm1
'行を挿入値にする Rows(St & ":" & Fn).Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'1行ずつコピーするため、繰り返しFor Next構文を使う Dim i As Long '繰り返し変数定義 Dim Fn2 As Long '繰り返すストップの為 Fn2 = Textbx2 - 1 Rows(Ori & ":" & Ori).Select Selection.Copy For i = 0 To Fn2 Rows(St + i & ":" & St + i).Select ActiveSheet.Paste Next
'チェックボックスがON(事象を下げる)の場合はインデントして”期間1”にして日付を集計に変える If CheckBox1.Value = True Then 'True=ONです 'インデントの設定 Range("C" & St & ":" & "C" & Fn).Select Selection.IndentLevel = 1 '親事象のD列を"期間1"に変更。D6が"期間1"に相当 Range("D" & Ori).Select ActiveCell.Value = Range("D6").Value '親事象の日付の集計① Range("F" & Ori).Select ActiveCell.FormulaR1C1 = "=MIN(R[1]C:R[" & Textbx2 & "]C)" '親事象の日付の集計② Range("H" & Ori).Select ActiveCell.FormulaR1C1 = "=MAX(R[1]C:R[" & Textbx2 & "]C)" '個事象の折りたたみ追加 Rows(St & ":" & Fn).Select Selection.Rows.Group
  '追加行のアクションセルへ
  Range("C" & St).Select End If
End Sub


マクロのボタンをオートシェイプで作る。追加っぽい形のオートシェイプにしてみました。

マクロのボタン


ボタンにマクロ『popup』(標準moduleの方)を登録

マクロ登録

これで、ボタンを押すと「コマンドボックスが呼び出され、コマンドボックスで記入した数字をもとに行を追加する」アクションが開始されます。


あとは必要分の事象をコピーして使います。

必要分をコピーする


参考動画です。


おまけ

 

Excelテク集の目次は下の通り
(下のリンクから各項目に直接アクセスできます)

時短や快適さアップのテクニックが多くあります!!


最後まで見て頂きありがとうございました。


広告


広告


広告