桜チャート(Sakura Chart)

CSV を貼り付けるだけで、統計グラフを自動生成できる無料ウェブツール

Excelでグラフを大量に作る5つの方法

Excelで店舗別の売上、装置ごとの測定値、都道府県別の人口などを整理していると、 同じデザインのグラフを何枚も作りたい場面があります。

5枚程度ならコピーで対応できますが、対象が20件、50件と増えると、データ範囲やタイトルを 1枚ずつ変更する作業は現実的ではありません。この記事では、作成枚数と利用環境に合わせた方法を、 VBAやOffice Scriptsのコード例とともに解説します。

先に結論:作成枚数に応じて方法を選ぶ

方法枚数の目安難易度向いている場面
グラフをコピー5~10枚一度だけ少数のグラフを作る
グラフテンプレート5~20枚複数ファイルでデザインを統一する
VBA10~100枚以上デスクトップ版Excelで繰り返し作る
Office Scripts10~100枚以上Microsoft 365やExcel Webで自動化する
選択式グラフ1枚低~中画像を保存せず画面上で比較する
外部ツール数十~数百枚コードを書かず同じ設定で一括作成する

枚数は目安です。一度だけ作るのか、毎週・毎月繰り返すのかによっても適した方法は変わります。

この記事の内容

  1. 大量のグラフを手作業で作る問題点
  2. 5~10枚ならコピー
  3. テンプレートでデザインを統一
  4. VBAで一括作成
  5. Office Scriptsで一括作成
  6. 比較だけなら選択式グラフ
  7. コードを書かず大量作成
  8. 桜チャートで実際に作る手順
  9. よくあるエラーと注意点

1. 大量のグラフを手作業で作る問題点

たとえば、20店舗について月別売上の縦棒グラフを作るとします。 手作業では、最初のグラフをコピーしたあと、データ範囲、タイトル、縦軸の範囲などを20回設定し直します。

  • 参照範囲を1列ずらすなどのミスが起こりやすい
  • 色、サイズ、軸の範囲がグラフごとに少しずつ変わる
  • 元データが増えると、すべてのグラフを修正する必要がある
  • グラフオブジェクトが増えるほどExcelファイルが重くなる
  • 見た目が似ているため、間違ったグラフを見つけにくい

特に注意したいのは、見た目は正しくても参照している列が違うケースです。 報告書に貼り付けたあとで気づくと、グラフだけでなく説明文や資料も修正しなければなりません。

以降では、次の表から東京・大阪・福岡のグラフを1枚ずつ作る例を使います。

東京大阪福岡
1月12010080
2月13511595
3月150125110
4月145130120

A列を横軸、B列以降をグラフごとの縦軸データとして扱います。

2. 5~10枚ならグラフをコピーする

一度だけ作成するグラフが5~10枚程度なら、最初のグラフをコピーする方法が簡単です。

最初のグラフを作る

  1. A列の「月」とB列の「東京」を選択します。
  2. 「挿入」から「2-D 縦棒」の「集合縦棒」を選びます。
  3. グラフタイトル、色、サイズ、軸ラベルを整えます。
Excelで月列と東京列を選択した画面
A列の「月」とB列の「東京」を、見出しを含めて選択します。
Excelの挿入タブから集合縦棒グラフを選ぶ画面
「挿入」タブから「2-D 縦棒」の集合縦棒グラフを選びます。

コピーしたグラフのデータを変える

  1. 完成したグラフをコピーします。
  2. コピーしたグラフを右クリックして「データの選択」を開きます。
  3. 系列名を大阪の見出しセル、系列値を大阪のデータ範囲へ変更します。
  4. グラフタイトルも「大阪」に変更します。
  5. 福岡についても同じ操作を行います。
Excelのデータソースの選択画面で系列を大阪へ変更する例
コピーしたグラフの「データの選択」を開き、系列名と系列値を大阪の列へ変更します。
東京・大阪・福岡の集合縦棒グラフを3枚作成したExcel画面
同じ操作を繰り返し、東京・大阪・福岡の縦棒グラフを作成した例です。

この方法は、グラフが少なく、今後繰り返す予定がない場合に向いています。 毎月同じ作業をする場合や対象が数十件ある場合は、VBAの方が効率的です。

3. デザインはグラフテンプレートで統一する

複数のExcelファイルで同じデザインを使う場合は、完成したグラフをテンプレートとして保存できます。

作成したデザインをテンプレートとして保存する

  1. 色、フォント、凡例、軸などを設定したグラフを作ります。
  2. グラフを右クリックし、「テンプレートとして保存」を選択します。
  3. 名前を付けて.crtx形式で保存します。
Excelのグラフを右クリックしてテンプレートとして保存を選ぶ画面
完成したグラフを右クリックし、「テンプレートとして保存」を選びます。

保存したテンプレートを別のグラフへ適用する

  1. デザインを変更したいグラフを選択し、「グラフの種類の変更」を開きます。
  2. 「すべてのグラフ」から「テンプレート」を選びます。
  3. 保存したテンプレートを選択し、「OK」を押します。
  4. ほかのグラフにも同じ操作を行います。
Excelのグラフの挿入画面で保存したテンプレートを選択する例
「すべてのグラフ」→「テンプレート」から、保存したデザインを選択します。
東京・大阪・福岡の縦棒グラフへ同じ緑色のテンプレートを適用したExcel画面
東京・大阪・福岡のグラフへ同じテンプレートを適用し、色や書式を統一した例です。
テンプレートにはグラフの種類、色、書式などが保存されますが、元データは保存されません。 テンプレートは大量作成そのものではなく、大量のグラフの見た目を統一する機能です。

複数の担当者が同じ報告書を作る場合にも便利です。会社や研究室で標準テンプレートを用意しておけば、 色やフォントのばらつきを減らせます。

Microsoft公式:カスタムグラフをテンプレートとして保存する

4. 数十枚ならVBAでグラフを一括作成する

数十枚以上のグラフを繰り返し作る場合はVBAが有効です。次のコードは、 「データ」シートのA列を横軸、B列以降を縦軸として、列ごとにマーカー付き折れ線グラフを作成します。 結果は「グラフ一覧」シートに2列で配置されます。

最初に、グラフ化する表が入っているワークシートの名前を「データ」に変更してください。 画面下部のシート見出し(「Sheet1」など)をダブルクリックし、「データ」と入力します。 シート名が異なると、サンプルコードのWorksheets("データ")で対象シートを見つけられません。

実行手順

  1. 表が入っているシート名を「データ」に変更します。
  2. Excelファイルを「Excelマクロ有効ブック(.xlsm)」で保存します。
  3. AltF11でVBAエディターを開きます。
  4. 「挿入」から「標準モジュール」を選択します。
  5. 次のコードを貼り付けます。
  6. Excelに戻り、「表示」タブの「マクロ」から作成したマクロを選んで実行します。
ExcelのVBAエディターで挿入メニューから標準モジュールを選択する画面
VBAエディターで「挿入」→「標準モジュール」を選びます。
ExcelのVBA標準モジュールへグラフ一括作成コードを貼り付けた画面
追加された標準モジュールに、下のサンプルコードを貼り付けます。
Excelのマクロ一覧からグラフ一括作成マクロを実行する画面
Excelへ戻り、「表示」→「マクロ」から作成したマクロを選択して実行します。
Option Explicit

Sub 列ごとに折れ線グラフを一括作成()

    Dim wsData As Worksheet
    Dim wsChart As Worksheet
    Dim chartObj As ChartObject
    Dim lastRow As Long
    Dim lastCol As Long
    Dim col As Long
    Dim leftPos As Double
    Dim topPos As Double

    On Error GoTo ErrorHandler

    Set wsData = ThisWorkbook.Worksheets("データ")

    ' Get the output worksheet, or create it when it does not exist
    On Error Resume Next
    Set wsChart = ThisWorkbook.Worksheets("グラフ一覧")
    On Error GoTo ErrorHandler

    If wsChart Is Nothing Then
        Set wsChart = ThisWorkbook.Worksheets.Add(After:=wsData)
        wsChart.Name = "グラフ一覧"
    End If

    lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row
    lastCol = wsData.Cells(1, wsData.Columns.Count).End(xlToLeft).Column

    If lastRow < 2 Or lastCol < 2 Then
        MsgBox "グラフに使用できるデータがありません。", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False

    ' Delete charts from the previous run
    Do While wsChart.ChartObjects.Count > 0
        wsChart.ChartObjects(1).Delete
    Loop

    ' Create one chart for each column from B onward
    For col = 2 To lastCol

        ' Arrange charts in two columns
        leftPos = 20 + ((col - 2) Mod 2) * 500
        topPos = 20 + Int((col - 2) / 2) * 290

        Set chartObj = wsChart.ChartObjects.Add( _
            Left:=leftPos, _
            Top:=topPos, _
            Width:=460, _
            Height:=250)

        With chartObj.Chart
            .ChartType = xlLineMarkers
            .SeriesCollection.NewSeries

            With .SeriesCollection(1)
                .Name = CStr(wsData.Cells(1, col).Value)
                .XValues = wsData.Range( _
                    wsData.Cells(2, 1), _
                    wsData.Cells(lastRow, 1))
                .Values = wsData.Range( _
                    wsData.Cells(2, col), _
                    wsData.Cells(lastRow, col))
            End With

            .HasTitle = True
            .ChartTitle.Text = CStr(wsData.Cells(1, col).Value)
            .HasLegend = False
        End With

    Next col

    Application.ScreenUpdating = True
    MsgBox CStr(lastCol - 1) & "枚のグラフを作成しました。", vbInformation
    Exit Sub

ErrorHandler:
    Application.ScreenUpdating = True
    MsgBox "グラフを作成できませんでした。" & vbCrLf & _
           "シート名とデータの配置を確認してください。" & vbCrLf & _
           "エラー内容:" & Err.Description, vbExclamation

End Sub
VBAで東京・大阪・福岡の折れ線グラフを一括作成したExcel画面
マクロを実行すると、「グラフ一覧」シートに東京・大阪・福岡の折れ線グラフがまとめて作成されます。

グラフの種類を変更する

この例では.ChartType = xlLineMarkersを指定しています。別の種類にする場合は、この部分を変更します。

グラフVBAでの指定
マーカー付き折れ線xlLineMarkers
集合縦棒xlColumnClustered
集合横棒xlBarClustered
散布図xlXYScatter
線付き散布図xlXYScatterLines
円グラフxlPie

店舗別の売上、装置別の温度や圧力、都道府県別の人口、試料別の測定結果などに応用できます。 VBAではChartObjects.Addを使い、グラフの位置、幅、高さを指定しています。

サンプルコードは「グラフ一覧」シートにある既存グラフを削除してから作り直します。 残したいグラフがある場合は、ファイルを複製するか出力先のシート名を変更してください。

Microsoft公式:ChartObjects.Addメソッド

5. Microsoft 365ならOffice Scriptsを使う

Microsoft 365のExcelでは、Office Scriptsで繰り返し作業を自動化できます。 「自動化」タブが表示されている環境では、操作を記録したりTypeScript形式のコードを編集したりできます。

  1. 表が入っているシート名を「データ」にし、表の左上をA1セルに合わせます。
  2. Excelの「自動化」タブを開きます。
  3. 「新しいスクリプト」からコードエディターを開きます。
  4. 次のコードを貼り付けて保存します。
  5. スクリプトを実行し、「グラフ一覧」シートを確認します。
Excelの自動化タブからコードエディターで作成を選ぶ画面
「自動化」タブを開き、「新しいスクリプト」→「コードエディターで作成」を選びます。
ExcelでOffice Scriptsのコードエディターを開いた画面
表示された初期コードを削除し、下のコードをすべて貼り付けます。
function main(workbook: ExcelScript.Workbook) {
  const dataSheet: ExcelScript.Worksheet | undefined =
    workbook.getWorksheet("データ");

  if (!dataSheet) {
    throw new Error("「データ」シートが見つかりません。");
  }

  const firstCell: ExcelScript.Range = dataSheet.getRange("A1");

  if (firstCell.getText().trim() === "") {
    throw new Error("A1セルから始まるデータ表が見つかりません。");
  }

  const dataRange: ExcelScript.Range =
    firstCell.getSurroundingRegion();

  const rowCount: number = dataRange.getRowCount();
  const columnCount: number = dataRange.getColumnCount();

  if (rowCount < 2 || columnCount < 2) {
    throw new Error("グラフに使用できるデータがありません。");
  }

  let outputSheet: ExcelScript.Worksheet | undefined =
    workbook.getWorksheet("グラフ一覧");

  if (!outputSheet) {
    outputSheet = workbook.addWorksheet("グラフ一覧");
  }

  outputSheet.getCharts().forEach(
    (chart: ExcelScript.Chart) => chart.delete()
  );

  const seedRange: ExcelScript.Range =
    outputSheet.getRange("A1:A2");

  seedRange.setValues([
    ["Temporary"],
    [0]
  ]);

  const xRange: ExcelScript.Range =
    dataSheet.getRangeByIndexes(
      1,
      0,
      rowCount - 1,
      1
    );

  let chartIndex: number = 0;

  for (let col: number = 1; col < columnCount; col++) {
    const title: string =
      dataRange.getCell(0, col).getText().trim();

    if (title === "") {
      continue;
    }

    const yRange: ExcelScript.Range =
      dataSheet.getRangeByIndexes(
        1,
        col,
        rowCount - 1,
        1
      );

    const chart: ExcelScript.Chart =
      outputSheet.addChart(
        ExcelScript.ChartType.line,
        seedRange
      );

    chart.getSeries().forEach(
      (existingSeries: ExcelScript.ChartSeries) =>
        existingSeries.delete()
    );

    const series: ExcelScript.ChartSeries =
      chart.addChartSeries(title);

    series.setXAxisValues(xRange);
    series.setValues(yRange);

    chart
      .getAxes()
      .getCategoryAxis()
      .setCategoryType(
        ExcelScript.ChartAxisCategoryType.textAxis
      );

    chart.getTitle().setText(title);
    chart.getLegend().setVisible(false);

    chart.setWidth(460);
    chart.setHeight(250);
    chart.setLeft(20 + (chartIndex % 2) * 500);
    chart.setTop(
      20 + Math.floor(chartIndex / 2) * 290
    );

    chartIndex++;
  }

  seedRange.clear(
    ExcelScript.ClearApplyTo.contents
  );
}
Office Scriptsで東京・大阪・福岡の折れ線グラフを一括作成した結果
実行すると「グラフ一覧」シートが作成され、列ごとの折れ線グラフが2列に配置されます。

Office Scriptsは、Excel Webを中心に使う場合、作業をチームで共有する場合、 Power AutomateなどのMicrosoft 365サービスと連携する場合に向いています。

Microsoft 365の契約内容や組織の管理設定によっては、「自動化」タブを利用できない場合があります。 その場合は、デスクトップ版ExcelのVBAか、コード不要のグラフ作成ツールを検討します。

6. 比較だけなら選択式グラフにする

大量に作りたい理由が「各項目を順番に比較したい」だけなら、何十枚も作らず、 1枚のグラフの表示内容をプルダウンで切り替える方法があります。

  1. H2セルに東京・大阪・福岡のプルダウンを作ります。
  2. I2セルに次の数式を入力し、下方向へコピーします。
  3. A列とI列を使ってグラフを1枚作成します。
=INDEX($B$2:$D$13,ROW(A1),MATCH($H$2,$B$1:$D$1,0))

この数式は、H2で選んだ地域が何列目にあるかをMATCHで調べ、 その列の値をINDEXで取り出します。H2を変えるとI列とグラフが切り替わります。

グラフタイトルも連動させる場合は、グラフタイトルを選択し、数式バーに次のように入力します。

=データ!$H$2

選択式グラフは会議やダッシュボードに向き、Excelファイルも軽くできます。 一方、全店舗のグラフを報告書に貼る場合や、項目ごとに画像保存する場合には向きません。

7. コードを書かずにグラフを大量作成する方法

VBAやOffice Scriptsは便利ですが、コードの貼り付け、マクロの許可、ファイル形式の変更などが必要です。 会社のパソコンでは、セキュリティ設定によってマクロを実行できないこともあります。

コードを使わず一括作成する場合は、次の機能を持つツールを選びます。

  • Excelの表をコピーして貼り付けられる
  • CSVファイルを読み込める
  • グループごとに同じ形式のグラフを作れる
  • 色やサイズをまとめて設定できる
  • 複数のグラフを画像として保存できる

この方法は、数十枚から数百枚を同じ設定で作りたい場合や、たまにしか大量作成しない場合に向いています。 コードを保守する必要もありません。

社外秘の測定値、個人情報、未公開の業務データは、組織のルールを確認してから外部サービスへ入力してください。 外部への持ち出しが禁止されているデータは、Excel内でVBAやOffice Scriptsを使います。

8. 桜チャートで実際にグラフを一括作成する手順

桜チャートでは、Excelの表をコピーして貼り付けるか、CSVファイルを読み込んでグラフを作成できます。 コードは不要です。複数のグラフを作る場合は、店舗名や装置名などを入力したLEVEL列を使います。

STEP 1:Excelでデータを縦方向に整理する

LEVEL売上
東京1月120
東京2月135
東京3月150
大阪1月100
大阪2月115
大阪3月125
福岡1月80
福岡2月95
福岡3月110

LEVEL列を見るだけで「何を基準にグラフを分けるか」が分かり、対象が増えても管理しやすくなります。 棒グラフのX軸はカテゴリーとして扱われるため、月は1月2月3月のような文字列で入力できます。 Y軸に使う売上は数値のまま入力します。

STEP 2:表を貼り付ける

見出しを含めて表をコピーし、桜チャートの入力欄に貼り付けます。CSVファイルのアップロードも利用できます。

  • 1行目に列名を入れる
  • 表の途中に空白行を作らない
  • 数値セルへ「円」「個」などの文字を入れない
  • 「東京」「東京都」「東京店」などの表記揺れをなくす
桜チャートで文字列の月をX軸にした棒グラフを表示した画面
月を文字列として読み込み、棒グラフのX軸カテゴリーに表示した例です。

STEP 3:X列・Y列・LEVEL列を選ぶ

  • X列:月(値は「1月」「2月」「3月」の文字列)
  • Y列:売上
  • LEVEL列:LEVEL
  • 表示方法:分割(LEVELごとに別のグラフを作成)
  • グラフの種類:棒グラフ(集合縦棒)

STEP 4:見た目を設定する

タイトル、色、サイズ、凡例などを設定します。比較用のグラフでは、すべてのグラフで縦軸の範囲をそろえることが重要です。 グラフごとに縦軸が自動調整されると、小さな変化が大きく見えることがあります。

STEP 5:作成結果を確認する

  • LEVELごとに正しく分かれているか
  • X軸の順番が正しいか
  • 値が数値として読み込まれているか
  • タイトルと元データが一致しているか
  • 縦軸の範囲が比較に適しているか

サンプルデータで試す

次のボタンから、東京・大阪・福岡のサンプルデータを入力した状態でグラフ作成画面へ進めます。

9. よくあるエラーと注意点

行と列が逆に認識される

Excelの「グラフのデザイン」から「行/列の切り替え」を試します。 VBAではXValuesValuesを明示すると、意図しない切り替わりを防ぎやすくなります。

日付が正しい順番にならない

日付が文字列として保存されている可能性があります。表示形式を変えるだけでは日付データへ変換されない場合があるため、 Excelが日付として認識しているか確認してから並べ替えます。

数値がグラフに反映されない

「120円」「約100」「-」などの文字が含まれていないか確認します。 単位は値へ直接入力せず、セルの表示形式や軸ラベルで表します。

グラフ同士が重なる

VBAやOffice Scriptsで、作成番号に応じた横位置と縦位置を計算します。サンプルコードでは2列ずつ配置しています。

VBAマクロを実行できない

  • ファイルが.xlsxではなく.xlsmか確認する
  • 信頼できるファイルで「コンテンツの有効化」を選ぶ
  • 会社や学校の管理設定でマクロが禁止されていないか確認する
  • 重要なファイルではなく複製したファイルで試す

「自動化」タブが表示されない

Office Scriptsの利用可否は、Microsoft 365の契約内容や組織の設定によって異なります。表示されない場合は管理者へ確認します。

グラフを増やすとExcelが重くなる

Excel内に大量のグラフオブジェクトを置くと、表示や保存に時間がかかります。 比較だけなら選択式グラフにし、数百枚を一度に作る場合は画像として一括出力する方が管理しやすいことがあります。

まとめ

  • 5~10枚なら、完成したグラフをコピーする
  • 複数ファイルで見た目をそろえるなら、グラフテンプレートを使う
  • 数十枚を繰り返し作るなら、VBAで自動化する
  • Microsoft 365やExcel Webなら、Office Scriptsを検討する
  • 比較だけなら、選択式グラフで1枚にまとめる
  • コードを書かず大量に画像を作るなら、グラフ作成ツールを利用する

大量作成で重要なのは時間短縮だけではありません。同じ参照範囲、軸、デザインを使い、設定ミスを減らすことにも意味があります。 Excel内で完結させるならVBAやOffice Scripts、コードを使わず同じ形式でまとめて作るなら桜チャートを使い分けてください。

関連記事