【エクセルVBA】階段状の積み上げ棒グラフを作成する方法!データ指定するだけ!

 

この記事では、以下の画像のような階段状の積み上げ棒グラフをVBAを使って一発作成する方法をご紹介します。

階段状の積み上げ棒グラフを作成するという概要図

たまに企業の決算報告等で見るやつですね。

 

今回紹介するものを使えば、上記のように単純な積み上げだけではなく、マイナス数値を積み下ろすことも可能です。

 

非常に便利ですので、ぜひご活用ください。

 

それではさっそくやっていきましょう。

 

※この記事ではVBAを使用します。つかったことがない方は、まずは以下の記事を参考にVBAの実行環境を構築しましょう。

エクセルマクロ(VBA)の始め方!初心者向けに画像を使って詳細解説

 

スポンサーリンク

ベースとなるデータを用意する

グラフを作成するうえで、まずはデータがないと始まりません。

というわけで今回は以下のデータを使っていこうと思います。

使用するサンプルデータ

今回は7行分しかありませんが、基本的には何行あっても対応可能です。

 

また、今回はグラフを作成する都合上、データの右隣2列分は空白にしておいてください。

 

基本的にあなたがやるべきことはこのデータ作成およびデータの存在領域(今回の場合はA1セルからD7セル)をVBAコード中で指定してあげるだけです。

 

それでは実際のコーディング作業に入っていきましょう。

 

スポンサーリンク

階段状積み上げ棒グラフを作成するVBAコード

さっそくですが、以下が冒頭に紹介した階段状積み上げ棒グラフを作成するVBAコードです。

Sub Make_step_grf()
    Dim num_data As Integer
    Dim data As Variant
    Dim grf_title As String
    'データ領域を指定(2列分余分にとっておく)
    Set data_region = Range("A1:D7")
    'グラフのタイトルを指定
    grf_title = "前年比改善効果(億円)"
    'グラフ用データ作成処理開始
    data = data_region
    num_data = UBound(data, 1)
    data(1, 3) = 0
    data(1, 4) = Abs(data(1, 2))
    For i = 1 To num_data - 1
        If data(i, 2) > 0 And data(i + 1, 2) > 0 Then
            data(i + 1, 3) = data(i, 2) + data(i, 3)
        ElseIf data(i, 2) > 0 And data(i + 1, 2) < 0 Then
            data(i + 1, 3) = data(i, 2) + data(i, 3) + data(i + 1, 2)
        ElseIf data(i, 2) < 0 And data(i + 1, 2) < 0 Then
            data(i + 1, 3) = data(i, 3) + data(i + 1, 2)
        Else
            data(i + 1, 3) = data(i, 3)
        End If
        data(i + 1, 4) = Abs(data(i + 1, 2))
    Next
    For i = 1 To num_data
        data_region(i, 3) = data(i, 3)
        data_region(i, 4) = data(i, 4)
    Next
    'グラフ作成処理
    data_region.Select
    ActiveSheet.Shapes.AddChart2(297, xlColumnStacked).Select
    ActiveChart.FullSeriesCollection(1).Delete
    '積み上げ部分を透明に
    ActiveChart.FullSeriesCollection(1).Format.Fill.Visible = msoFalse 
    '改善は黒色、悪化は赤色に変更
    For i = 1 To num_data
        ActiveChart.FullSeriesCollection(2).Points(i).Select
        If data(i, 2) > 0 Then
            Selection.Format.Fill.ForeColor.RGB = RGB(0, 0, 0)
            Selection.Format.Fill.TwoColorGradient msoGradientHorizontal, 1
            Selection.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
        Else
            Selection.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
            Selection.Format.Fill.TwoColorGradient msoGradientHorizontal, 2
            Selection.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
        End If
    Next
    'グラフの見栄え調整
    ActiveChart.Legend.Delete
    ActiveChart.ChartTitle.Text = grf_title
End Sub

 

先ほども説明したようにコードの6行目でデータの存在領域を指定してあげています。

また、8行目では作成したグラフのタイトルを指定しています。

 

基本的に指定すべき点はこれだけです。

 

なお、グラフの色やグラデーションを変更したい場合は、35行目以降を適宜変更してください。

以下がその際の参考記事です。

【エクセルVBA】棒グラフのバーの色を変更&グラデーション化する方法!

 

スポンサーリンク

サンプルコードの実行結果

最後に先ほどのサンプルコードを実行してみましょう。

実行前は以下のようにデータだけが存在する状態です。

マクロ実行前の状況

 

この状態から、開発タブ⇒マクロ⇒Make_step_grfを選択⇒実行の順で実行します。

 

すると以下のようにデータが追記され、さらにグラフが出力されました。

サンプルコードを実行した結果

改善、悪化がわかりやすくて良いですね。

スポンサーリンク

おわりに

というわけで今回はデータから階段状の積み上げ棒グラフ一発作成する方法をご紹介しました。

ぜひ資料作成の際などにご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました