ガントチャートの作成 エクセルVBA
動作条件
オートフィルタでタスクを1つに絞る。その後マクロ実行でガントチャートを作成。
コード
Sub ガントチャート作成() Line = Cells(Rows.Count, 1).End(xlUp).Row 'グラフの作成 Range("B1", Range("c1").End(xlDown)).Select ActiveSheet.Shapes.AddChart2(Style:=297, XlChartType:=xlBarStacked, Left:=200, Top:=20, Width:=600, Height:=400).Select ActiveSheet.ChartObjects(1).Name = "my" '補助線 ActiveChart.Axes(xlValue).HasMinorGridlines = True ActiveChart.Axes(xlValue).MinorUnit = 1 '日数の追加(タスクに必要な日数) Range("D1:D8").Select Selection.Copy ActiveSheet.ChartObjects("my").Activate ActiveChart.Paste '軸の日付の範囲 ActiveChart.Axes(xlValue).MinimumScale = Range("C2").Value2 - 5 ActiveChart.Axes(xlValue).MaximumScale = Range("E" & Line).Value2 + 5 'データラベル表示 ActiveChart.SetElement (msoElementDataLabelCenter) ActiveChart.FullSeriesCollection(1).DataLabels.Select Selection.Position = xlLabelPositionInsideEnd ActiveChart.Axes(xlValue).MinorGridlines.Select '色をつけない。 ActiveChart.FullSeriesCollection(1).Select Selection.Format.Fill.Visible = msoFalse '軸の反転 ActiveChart.Axes(xlCategory).ReversePlotOrder = True 'グラフタイトル作成 ActiveChart.SetElement (msoElementChartTitleAboveChart) ActiveChart.ChartTitle.Text = Range("A2").Value End Sub
コード改良してみた。
前記のコードは、D2:D8と行を指定しまっているので、改良してみました。
Sub ガントチャート作成() Dim ChartObj As Object Line = Cells(Rows.Count, 1).End(xlUp).Row 'オートフィルタ後に実行 Range("B1", Range("c1").End(xlDown)).Select ActiveSheet.Shapes.AddChart2(Style:=297, XlChartType:=xlBarStacked, Left:=200, Top:=20, Width:=400, Height:=400).Select 'ActiveChart.SetSourceData Source:=Range("B1:c" & Line).Select ActiveSheet.ChartObjects(1).Name = "my" Set ChartObj = ActiveSheet.ChartObjects(1) '補助線 ActiveChart.Axes(xlValue).HasMinorGridlines = True ActiveChart.Axes(xlValue).MinorUnit = 1 Range("D1", Range("D1").End(xlDown)).Select Selection.Copy ActiveSheet.ChartObjects("my").Activate ActiveChart.Paste '軸の日付の範囲 'ActiveChart.Axes(xlValue).MinimumScale = 43922 'ActiveChart.Axes(xlValue).MaximumScale = 43981 'データラベル表示 ActiveChart.SetElement (msoElementDataLabelCenter) ActiveChart.FullSeriesCollection(1).Select Selection.Format.Fill.Visible = msoFalse ActiveChart.Axes(xlCategory).ReversePlotOrder = True End Sub
つまりは、オートフィルタかけて最終行を取得して、グラフ作って設定をごにょごにょしただけです。