当サイトは各記事にプロモーションが含まれています

MYPROTEIN
おすすめの味

GronG
おすすめの味

ULTORA
おすすめの味

ON
おすすめの味

Pick up!

筋トレ・サプリ

 
マイプロテインってどんなブランド?【おすすめな理由を徹底解説】

マイプロテインってどんなブランド?【おすすめな理由を徹底解説】

2021/04/16
 
【GronG/グロング】スタンダードとベーシックの違いは?【おすすめが決定】

【GronG/グロング】スタンダードとベーシックの違いは?【おすすめが決定】

2022/06/15
 
【1番おすすめのホエイプロテインが決定】勝手に点数評価して比較しました

【1番おすすめのホエイプロテインが決定】勝手に点数評価して比較しました

2021/05/15

働き方

 
社会人の「つまらない」を抜け出す方法を解説【行動の意味を考える】

社会人の「つまらない」を抜け出す方法を解説【行動の意味を考える】

2022/02/18
 
【徹底解剖】テックアカデミーのフロントエンドコースの情報まとめ

【徹底解剖】テックアカデミーのフロントエンドコースの情報まとめ

2022/10/19
 
【初心者必見】VBAで業務効率化を実現するまでのロードマップ【6つの手順で実現】

VBAで業務効率化を実現するまでのロードマップ【6つの手順で実現】

2021/04/13

エンタメ

 
【徹底解剖】アローバースを理解するための完全ガイド【見どころをまとめました】

アローバースを理解するための完全ガイド【見どころをまとめました】

2021/04/26
 
【トム・ハーディ】おすすめ映画5作品

【トム・ハーディ】おすすめ映画5作品

2019/03/09
 
【どんな役でもこなす俳優マーク・ウォールバーグ】おすすめ映画17選

【どんな役でもこなす俳優マーク・ウォールバーグ】おすすめ映画17選

2020/03/22

コラム

 
【入院前に必ず読んでください】病室での生活を快適にする便利グッズを紹介【体験談あり】

病室での生活を快適にする便利グッズを紹介【体験談あり】

2021/05/24
 
入院時におすすめのWi-Fiレンタルサービスを紹介

入院時におすすめのWi-Fiレンタルサービスを紹介

2021/07/20
 
【健康に良いおすすめの入浴剤は?】入浴剤を悩みに沿ったおすすめ10選

【健康に良いおすすめの入浴剤は?】入浴剤を悩みに沿ったおすすめ10選

2020/03/16

新着&プロフィール

【Excel(エクセル)/マクロ/VBA】棒グラフの自動作成で効率化

f:id:tainers:20200328233410j:plain

『グラフを自動で作成できるようになりたい』

『マクロを使ってグラフを作成したい』

 

この記事では、上記の悩みを解決するために、Excelのマクロを利用してグラフを自動で作成して、単純集計の時間を効率化する方法を図解します。

 

また、この記事で得られる知識やスキルは以下の通りです。

スキル
  • マクロで棒グラフを作成できる
  • マクロで昇順にソートできる
  • マクロでコピペができる
  • マクロで新しいシートを追加できる
  • グラフにデータラベルを表示できる

ではさっそく本題に入っていきます。例として以下のような表があるとしましょう。

f:id:tainers:20200329000316p:plain

この表を利用して、科目ごとに以下のような表を作成します。

f:id:tainers:20200329001638p:plain

マクロの実行までの手順を知りたい方は、以下を参考にしてください。

このグラフ作成のマクロの手順とコードは以下の通り。

手順
  1. 新規シートを作成
  2. グラフ作成に必要なデータをコピペ
  3. 点数を昇順にソート
  4. 棒グラフ作成
  5. データラベル表示
Sub 自動集計()
    
    '--国語--'

        '--新規シートを末尾に追加--'
        Worksheets.Add After:=Sheets(Worksheets.Count)
        ActiveSheet.Name = "国語"
        
        '--国語のデータをコピペ--'
        Worksheets("Sheet1").Range("B1:B11").Copy Destination:=Worksheets("国語").Range("A1")
        Worksheets("Sheet1").Range("D1:D11").Copy Destination:=Worksheets("国語").Range("B1")
        
        '--点数を昇順にソート--'
        Range("A2:B11").Sort Key1:=Range("B2"), Order1:=xlAscending
        
        '--棒グラフ作成--'
        With ActiveSheet.Shapes.AddChart.Chart
    
            .ChartType = xlBarClustered
            .SetSourceData Range("A1:A11, B1:B11")
    
        End With
        
        '--データラベル(値)追加--'
        With ActiveSheet.ChartObjects(1).Chart
            .SeriesCollection(1).HasDataLabels = True
        End With


    '--英語--'
    
        '--新規シートを末尾に追加--'
        Worksheets.Add After:=Sheets(Worksheets.Count)
        ActiveSheet.Name = "英語"
        
        '--英語のデータをコピペ--'
        Worksheets("Sheet1").Range("B1:B11").Copy Destination:=Worksheets("英語").Range("A1")
        Worksheets("Sheet1").Range("E1:E11").Copy Destination:=Worksheets("英語").Range("B1")
        
        '--点数を昇順にソート--'
        Range("A2:B11").Sort Key1:=Range("B2"), Order1:=xlAscending
        
        '--棒グラフ作成--'
        With ActiveSheet.Shapes.AddChart.Chart
    
            .ChartType = xlBarClustered
            .SetSourceData Range("A1:A11, B1:B11")
    
        End With
        
        '--データラベル(値)追加--'
        With ActiveSheet.ChartObjects(1).Chart
            .SeriesCollection(1).HasDataLabels = True
        End With


    '--数学--'
    
        '--新規シートを末尾に追加--'
        Worksheets.Add After:=Sheets(Worksheets.Count)
        ActiveSheet.Name = "数学"
        
        '--数学のデータをコピペ--'
        Worksheets("Sheet1").Range("B1:B11").Copy Destination:=Worksheets("数学").Range("A1")
        Worksheets("Sheet1").Range("F1:F11").Copy Destination:=Worksheets("数学").Range("B1")
        
        '--点数を昇順にソート--'
        Range("A2:B11").Sort Key1:=Range("B2"), Order1:=xlAscending
        
        '--棒グラフ作成--'
        With ActiveSheet.Shapes.AddChart.Chart
    
            .ChartType = xlBarClustered
            .SetSourceData Range("A1:A11, B1:B11")
    
        End With
        
        '--データラベル(値)追加--'
        With ActiveSheet.ChartObjects(1).Chart
            .SeriesCollection(1).HasDataLabels = True
        End With


    '--日本史--'
    
        '--新規シートを末尾に追加--'
        Worksheets.Add After:=Sheets(Worksheets.Count)
        ActiveSheet.Name = "日本史"
        
        '--日本史のデータをコピペ--'
        Worksheets("Sheet1").Range("B1:B11").Copy Destination:=Worksheets("日本史").Range("A1")
        Worksheets("Sheet1").Range("G1:G11").Copy Destination:=Worksheets("日本史").Range("B1")
        
        '--点数を昇順にソート--'
        Range("A2:B11").Sort Key1:=Range("B2"), Order1:=xlAscending
        
        '--棒グラフ作成--'
        With ActiveSheet.Shapes.AddChart.Chart
    
            .ChartType = xlBarClustered
            .SetSourceData Range("A1:A11, B1:B11")
    
        End With
        
        '--データラベル(値)追加--'
        With ActiveSheet.ChartObjects(1).Chart
            .SeriesCollection(1).HasDataLabels = True
        End With


    '--物理--'
    
        '--新規シートを末尾に追加--'
        Worksheets.Add After:=Sheets(Worksheets.Count)
        ActiveSheet.Name = "物理"
        
        '--物理のデータをコピペ--'
        Worksheets("Sheet1").Range("B1:B11").Copy Destination:=Worksheets("物理").Range("A1")
        Worksheets("Sheet1").Range("H1:H11").Copy Destination:=Worksheets("物理").Range("B1")
        
        '--点数を昇順にソート--'
        Range("A2:B11").Sort Key1:=Range("B2"), Order1:=xlAscending
        
        '--棒グラフ作成--'
        With ActiveSheet.Shapes.AddChart.Chart
    
            .ChartType = xlBarClustered
            .SetSourceData Range("A1:A11, B1:B11")
    
        End With
        
        '--データラベル(値)追加--'
        With ActiveSheet.ChartObjects(1).Chart
            .SeriesCollection(1).HasDataLabels = True
        End With

End Sub
最後に

グラフの作成は、手作業で行うとなかなか時間がかかったりします。

 

上記の点数表ようにあまりフォーマットが変わらないものであれば、マクロを組んでいた方が作業効率化ができます。もちろん多少フォーマットが違っていてもマクロを組んで対応させることは可能です。

 

行や列の数に応じて、Range()の中身を変更できるので、ぜひ参考にしてください。

また、このマクロで必要になるコピペ、シート追加についてのより詳しい知識を知りたい方は下記をご覧ください。

下記の書籍は、とても見やすく簡潔にマクロの使用方法が書かれているので、作業効率化のために勉強しようと思っている人にはとてもおすすめです。

また、マクロはショートカットキーを設定することもできます。もし、興味がある方は以下をご覧ください。