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テク集の目次は下の通り
(下のリンクから各項目に直接アクセスできます)

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


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


広告


広告


広告