この記事では、Excelの行列を折りたたむ機能『グループ化』を使ってガントチャートをアレンジする方法を紹介します。
Excelでオリジナルのガントチャートを作るの記事はこちらを参考にして下さい。

ガントチャートは1次事象 – 2次事象 – 3次事象 とアクションを細分化していけるのが一般的です。
とはいえ、細かく枝分けしすぎると見にくくなると思っています。(多くても3次事象までかなと)
上の関連記事では2次事象までがデフォルトだったので、3次事象までを追加するのと、折りたたみできるようにアレンジしていきます。
~Excelガントチャートの事象追加と折りたたみ~
事象(子、枝)の追加
まずは手動でやっていきましょう。これが元の状態。

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

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

事象レベルがそのままなら、内容を変更して終了です。が、
事象を下げる場合(子を作る)は、以下の作業が必要
セルを選択して 右クリック – セルの書式設定 – インデントを1にする

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

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

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

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行ずつ書式のみコピーする
そしてできあがり

これで、事象がそのままの場合と事象を下げる場合の追加は完了です。
折りたたみ追加
ガントチャートは、アクションが多くなってくると折りたたんで見やすくしたくなります。
そこで、行のグループ化(列もできます)を使って、その機能を追加します。
まずは1次事象(10列目)より下をグループ化します。
11行目~14行目を選択し、データ – アウトライン – グループ化 を選択するか Shift + Alt + →キー

左上に『1』が出て、行番号より左に『ー』が現れます。
このどちらかを押すと折りたたまれます。


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

これでいい感じのガントチャートになってきましたね!!
作業をマクロ化
せっかくなので、行追加の一連の作業をVBAマクロにしましょう。
コードは、{標準moduleに書くユーザーフォームの呼び出しコード}と{ユーザーフォームに書く実行時のコード}です。
Sub popup()
'ユーザーフォーム(BOX)の召喚 UserForm1.Show
End Sub
コマンド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テク集の目次は下の通り
(下のリンクから各項目に直接アクセスできます)
時短や快適さアップのテクニックが多くあります!!
最後まで見て頂きありがとうございました。
広告
広告
広告