ファビコン。井の家紋。グラフを作成するエクセルマクロ(Excel VBA) | エクセルマクロ(VBA)実践蔵(じっせんぐら)

前の項目 - 持ち株の損益グラフを作成するマクロ
次の項目 - 文字色とスタイルの変更マクロ

グラフを作成するエクセルマクロ(Excel VBA)最終更新日:2023-06-24

まずは手動でグラフを作成します

データを選択し、挿入のグラフから作成したいグラフを選びます。

エクセル上で手動でグラフを作成

X軸,Y軸の設定に問題があれば、適宜修正します。

グラフタイトルは、セルと連動させます。タイトルを選択し、右クリックでテキストの編集を選択後に、上のFx右隣の入力バーに「=」を入力後、セルをクリックします。

グラフタイトルのセル参照

これで、X軸データ、Y軸データ、タイトルは、セルの内容と連動して、グラフは変化します。

試しに、どこかのセルの情報を書き換えて、確認してみてください。

仮にデータ数を減らした場合、表示がどう変わるかも確認してみましょう。

グラフの参照データを一部削除

この状態でグラフを選択し、右クリック、データの選択を選んでグラフの参照範囲を確認します。

グラフの参照範囲チェック

グラフの参照範囲は変わっていないことが確認できます。

そして、グラフの参照範囲に対してデータ量が少なくても、問題なく表示されることが確認できます。注意事項としては、グラフの参照範囲に影響を与える行の挿入や行の削除は行えません。

このシートをテンプレートとして扱い、「シートをコピー」、「シート名の変更」、「グラフが参照しているセルにデータを書き込む」ことで、マクロでグラフを作成することができます。一番データ量が多くなるケースに合わせて、テンプレートのグラフを作成しておきます。

以下は、例になりますが、グラフを含むテンプレートシートを複製し、リネーム後に、CSVファイルを開き、データを取得し、グラフが参照しているセルにデータを書き込み、別ブックへグラフのシートをコピーして保存するマクロになります。

CSVファイルのデータを使用したグラフを作成するマクロ

グラフを作成後に、グラフの参照セルの内容を削除した下記のシートをテンプレートとして扱います。

グラフテンプレート

別のシートに、ファイル参照ボタン(下記図では、「CSVファイルの指定」ボタン)とCSVファイルパスを入力するセル(下記図では、セルB4)、フォルダ参照ボタン(下記図では「グラフの出力先」)と出力フォルダパスを入力するセル(下記図では、セルB8)を準備し、ファイル名のセル(下記図では、セルD10)も準備します。

グラフ作成マクロ(例)

ファイル名のセルD10は、「=YEAR(TODAY())&TEXT(MONTH(TODAY()),"00")&".xlsx"」としています。このファイル名はセルから指定せず、CSVファイル名に「グラフ」の文字列を連結して作成してもいいと思います。

一応解説しておくと、エクセル関数 TODAY()で今日の日付のシリアル値を取得し、YEAR()やMONTH()に使用すると、年や月の数値情報を受け取れます。TEXTは表示形式の設定として、2桁を指定しています。一桁の場合、頭に0がつき、2桁になります。

CSVファイルを選択するファイル参照は、上記の記事「ファイル参照」を確認してください。

出力先フォルダを選択するフォルダ参照は、上記の記事「フォルダ参照」を確認してください。

開始ボタンのマクロ

 

Sub 開始ボタン_Click()

Dim NewBook As Workbook
Dim NewSheet As Worksheet
Dim filename As String
Dim FileSysObj As New FileSystemObject

'tempシートをコピー
Worksheets("temp").Copy Before:=Worksheets("temp")
Set NewSheet = ActiveSheet

filename = Range("B4").Value

'シート名の設定(CSVファイル名の先頭4文字)
NewSheet.Name = Left(FileSysObj.GetFileName(filename), 4)

'CSVデータの取り込み
Call ReadCSV(NewSheet)

Set NewBook = Workbooks.Add
'セルから保存フォルダとファイル名を取得して連結
NewBook.SaveAs Range("B8").Value & "\" & Range("D10").Value

'シートコピー
Call CopyGraphSheet_BooktoBook(ThisWorkbook, NewSheet.Name, NewBook)

'警告を抑止
Application.DisplayAlerts = False
'シート削除
NewSheet.Delete
'警告を抑止解除
Application.DisplayAlerts = True

'作成したエクセルブックを閉じる
NewBook.Save
NewBook.Close

'メモリ解放
Set NewBook = Nothing
Set NewSheet = Nothing
Set FileSysObj = Nothing

End Sub

開始ボタンのマクロの解説

テンプレートシート(シート名Temp)をコピーし、CSVファイルのファイル名から文字列を取り出して、コピーしたシート名を変更します。

関数ReadCSVの中で、CSVファイルを開き、データを取り出して、閉じています。

新しくブックを新規作成し、セルから出力先フォルダパスとファイル名を受け取って、一旦保存します。

関数CopyGraphSheet_BooktoBookを呼び出して、作成されたシートをコピーします。

コピー元シートを削除し、新規のブックは保存して閉じます。

関数ReadCSVと呼び出す関数

 

Function FcTitleRow() As Long
FcTitleRow = 2
End Function

Function Fc日付列数() As Long
Fc日付列数 = 1
End Function

Function Fc株価列数() As Long
Fc株価列数 = 2
End Function

Sub ReadCSV(Sht As Worksheet)

Dim filename As String
Dim csvBook As Workbook
Dim StockDateRngs As Range
Dim Rng As Range
Dim wtRow As Long

'タイトルの書き出し(銘柄Code シート名)
Sht.Range("B1").Value = "銘柄Code " & Sht.Name

'書き出し位置行数
wtRow = FcTitleRow + 1

If filename <> "Cancel" Then
'ファイルが選択された場合
Set csvBook = Workbooks.Open(Worksheets("ReadCSV").Range("B4").Value)

'CSVファイルファイルの日付列を取得(表題を除いたデータのみ)
With csvBook.Worksheets(1).UsedRange

Set StockDateRngs = csvBook.Worksheets(1).Range(.Item(FcTitleRow, 1), .Item(.Count))
Set StockDateRngs = StockDateRngs.Columns(1)

End With

'CSVファイルの日付列でループ(表題を除いたデータのみ)
For Each Rng In csvBook.Worksheets(1).Range(StockDateRngs.Address)

'日付列数 株価列数
Sht.Cells(wtRow, Fc日付列数).Value = Rng.Value
Sht.Cells(wtRow, Fc株価列数).Value = Rng.Offset(0, 1).Value

wtRow = wtRow + 1
Next
End If

csvBook.Close
Set csvBook = Nothing
Set StockDateRngs = Nothing
Set Rng = Nothing

End Sub

関数ReadCSVと呼び出す関数の解説

B1セルがグラフタイトルと連動しているため、B1セルにグラフタイトルを書き込みます。

CSVファイルを開き、データを取得しています。CSVファイルの内容は下記のような構成です。

CSVファイル構成

A列とB列のデータだけを写しています。(Rng.Offset(0, 1).Valueの部分がB列のデータです。)

CopySheet_BooktoBook()については、別ページの「別ファイルへシートの複製」を参照してください。

前の項目 - 持ち株の損益グラフを作成するマクロ
次の項目 - 文字色とスタイルの変更マクロ

2025/03/31 11:22 ExcelCalendar:こんにちは。対応ありがとうございます。丁寧な解説もありがとうございます。
2025/03/28 19:48 ExcelCalendar:【管理人】勉強中ということだったので、六曜追加対応の解説も追記しました。
2025/03/28 15:00 ExcelCalendar:【管理人】連絡ありがとうございます。段数が少ない月の調整を3段に対応するように修正しました。
2025/03/28 13:17 ExcelCalendar:こんにちは。六曜の件で質問があります。2025年1月でマクロを実行すると一行挿入されています。六曜の終わりも31日で終わらない月もあります。確認の程、宜しくお願い致します。
2025/03/26 10:26 ExcelCalendar:六曜の対応、ありがとうございます。勉強を始めたばかりで分からない点が多いですが、こちらのサイト見てマクロに強くなりたいと思います。今後とも宜しくお願い致します。
2025/03/25 11:32 ExcelCalendar:【管理人】エクセルでカレンダーを作成するマクロに六曜対応を追加しました。ダウンロードは六曜非対応版と2つに分けています。
2025/03/25 09:49 ExcelCalendar:【管理人】そうですね。六曜はwebAPIからなら取得できそうなので、処理時間は増えそうですが、考えてみます。
2025/03/24 13:25 ExcelCalendar:こちらを使用しております。六曜の対応をしたいのですが分かりません。テンプレートはございますか?
2025/03/18 18:48 MailDelete:【管理人】前回更新のOutlook迷惑メール削除マクロのバグ対応による更新。および、注意事項を追記しました。
2025/03/14 12:15 MailDelete:【管理人】Outlook迷惑メール削除マクロを更新しました。ホワイトリストチェックの追加と処理の軽量化、および、空メールの削除を追加。
2025/03/12 16:21 GetJPNHoliday:【管理人】2026年までの春分の日・秋分の日は、更新前のものでも対応できていることを確認したため、他のページはそのままにします。
2025/03/12 16:18 GetJPNHoliday:【管理人】国民の祝日を取得するエクセルマクロ。2050年までの春分の日秋分の日の暫定日が国立天文台のHPに記載があったため、このページのみ更新しました。
2025/03/11 11:54 MakeFolderAndStore:【管理人】ダウンロードファイル内のみ同じマクロを含むため、こちらも更新しました。#Windows日付表示形式変更対応
2025/03/11 11:52 GetFileMadeDate:【管理人】画像の撮影日取得マクロのWindows日付表示形式変更対応。更新しました。
2025/03/11 11:23 MakeFolderAndStore:【管理人】なるほど。Windowsの設定で表示形式が変更可能なのですね。対処しておきます。連絡ありがとうございます。
2025/03/10 22:05 HowToResolutionERROR:こちらの環境で、https://dekiru.net/article/23658/ これをやったからですね。windowsは表示日付のフォーマット変更が出来るので、その影響を受けたためかと。
2025/03/10 22:01 HowToResolutionERROR:replaceでは2が空文字に置き換わっているため、「"5/03/09(日)"」になっています
2025/03/10 22:01 HowToResolutionERROR:topString = Mid(dateString, 1, 1)では2が取得されており、
2025/03/10 22:01 HowToResolutionERROR:日時変換(dateString As String) の段階で"25/03/09(日) 21:36"になり、
2025/03/10 14:30 MakeFolderAndStore:【管理人】撮影日に曜日の日本語が入るケースがこちらの環境では確認できませんでした。再現できない事象に関しては対処が難しいです。Win11やWin10で書き換えをした場合、曜日は入らないです。
2025/03/10 12:57 AllFile-Trimming:【管理人】画像まとめて一括トリミングに高解像度画像の保存版を追加しました。半自動程度と思ってください。正しく対応するならPublisherを使用する必要がありそうです。
2025/03/09 21:48 MakeFolderAndStore:If IsDate(日時変換(dateString)) = True Then ここが日付判定されずに落ちますね。日時変換の中身が「"5/03/09(日)"」になっています。
2025/03/07 14:41 AllFile-Trimming:【管理人】バグ対応 画像まとめて一括トリミング 拡張子の大文字対応に不備があったので、上げなおしました。申し訳ありません。(v3r1)
2025/03/07 14:38 AllFile-Trimming:【管理人】ユーザ操作の模倣で、「図の保存」操作をVBにさせることでできるか試してみます
2025/03/07 14:37 AllFile-Trimming:【管理人】書き込みありがとうございます。確かに今の保存方法だと96dpiですね。VBからの画像ファイル書き出し命令では、解像度維持が難しそう。
2025/03/04 13:59 AllFile-Trimming:オプション「ファイル内のイメージを圧縮しない」にチェックを入れたりしてみたのですが変わりませんでした。もしご存じでしたら圧縮されない方法をご教示いただけますと幸いです。
2025/03/04 13:58 AllFile-Trimming:一括トリミングを使用させていただいたのですが、保存前(300dpi)後(96dpi)で解像度が変わってしまいます。
2025/02/28 12:40 AddPictWord:【管理人】新規記事 「Wordへの画像貼り付けマクロ(Wordマクロ)」を追加しました。
2025/02/28 12:39 AllFile-Trimming:【管理人】画像まとめて一括トリミングを更新。拡張子が大文字の場合に対応しました
2024/12/26 09:45 MakeFolderAndStore:【管理人】同じくファイルを年月別のフォルダに振り分けを行うマクロの撮影日取得箇所に同じ修正処置を入れています。
2024/12/26 09:43 GetFileMadeDate:【管理人】画像ファイルや動画ファイルの撮影日を取得するマクロのバグ対応を処置して更新しています。
2024/11/24 18:53 ExcelFlowChart:試してみたいと思います。ありがとうございます。
2024/09/09 11:11 MoveSheetstoOtherBook:ありがとうございます!
2024/09/05 09:38 GetJPNCodeStock:【管理人】Windows Updateによって、EdgeのVersionが上がったのであれば、Edgeドライバも最新にしてください
2024/09/05 09:35 GetJPNCodeStock:【管理人】確認しましたが、サイトに変更はないため、コードに変更はありません。
2024/08/30 12:50 GetJPNCodeStock:昨日がら取得エラーになってしまいます。
2024/08/10 09:40 MailDelete:削除済みに入っているようです。確認不足で申し訳ありませんでした。
2024/08/08 10:53 MailDelete:受信タイミングで deleteした場合削除済みに入らず、消えてしまうようなのですが、削除済みに入れれますか。
2024/08/08 10:19 MailDelete:受信タイミングで Call item.Delete
2024/08/05 13:32 MoveSheetstoOtherBook:【管理人】フォルダ参照へのリンクミスを修正
2024/08/05 11:02 AllFile-Trimming:【管理人】保存フォルダを開くボタンの追加と対象画像ファイルを明記しました。あとは、パスが長すぎると保存できないかもしれません。
2024/07/31 19:34 AllFile-Trimming:画像をまとめて一括でトリミング出来るツールを探していて、こちらにたどり着きました。DLさせていただいたのですが、トリミングした写真が保存できません。使用方法が間違っているのでしょうか?
2024/06/02 08:11 MailDelete:【管理人】コメントありがとうございます。質問はうちの記事と関係なそそうですが、「セル範囲のロック」で調べてみてください。
2024/07/24 09:49 MailDelete:ハイパーリンクを消そうとすると「選択範囲が保護されており・・」で出来ません、良い方法をご教示ください。
2024/07/24 09:34 MailDelete:まさにほぼ同じブラックリストで削除するのが大変でした。私は迷惑メールホルダーに隔離していますが、
2024/06/13 14:04 SearchWordFileTool:【管理人】ワード(Word)ファイルの検索(正規表現検索)を行うGrep風ツールで図形検索を追加対応しました。
2024/06/12 16:26 SeikiHyougenTool:【管理人】エクセルで正規表現検索と置換を行うためのツールに図形内文書も追加対応しました。
2024/06/06 22:03 FixNumbering:【バグ対応】章番号や項目番号の連番を自動訂正 正規表現の半角/全角 区別を修正(IgnoreCase=TRUEをFALSEに変更)
2024/06/02 08:11 SeikiHyougenTool:【管理人】新規記事の追加「エクセルで正規表現検索を行うためのツール」
2024/06/02 08:09 StringOperation-VBA:【管理人】バグ対応「文字列操作・正規表現」半角/全角 区別の判定が逆だったので、訂正。
2024/05/13 11:09 inputSupport-ShortCut:【管理人】バグ対応「自作カレンダーフォームをショートカットキーで呼び出そう」で複数ブックからの呼び出しで既にブックが閉じられていた場合の処置が抜けていたので追記
2023/08/31 10:01 CalendarForm:8/29に質問をしたものです。自己解決できましたので連絡いたします。お騒がせいたしました。
2023/08/29 10:24 CalendarForm:お世話になっております、「クラス型の変数を配列定義」の部分で「ユーザー定義型が定義されていません」と表示されてしまいます。何か確認、設定すべき事項はありますでしょうか?
2023/08/28 13:40 GetFilesPath:【管理人】バグ対応 ファイルリストの作成(GetAllFile)呼び出しの変更
2023/08/28 13:39 Supportffmpeg:【管理人】記事追加のおしらせ。ffmpegを使用した動画編集補助ツールの記事を追加しました。
2023/07/16 23:38 StringOperation-VBA:【管理人】RExp_FindStrArr関数で一致文字列が見つからない場合のバグ対応を実施
2023/07/03 18:40 ExcelFlowChart:【管理人】フローチャート入力補助ツールにコメント文をテキスト出力する機能を追加しました
2023/06/24 14:50 GetFilePath:【管理人】ファイル参照(初期フォルダ指定)のバグ対応を行いました
2023/06/12 12:13 CalendarForm:【管理人】カレンダーフォームを祝日表示に対応させました。
2023/06/07 12:35 CalendarForm:コメントありがとうございます。自作のカレンダフォームは、祝日に対応していません。
2023/06/07 09:51 CalendarForm:大変参考になります。祝日を列挙したシートがありますが、祝日を赤色にする方法はご説明されていますでしょうか
2023/06/07 09:51 inputSupport-ShortCut:祝日を列挙したシートがありますが、祝日を赤色にする方法はご説明されていますでしょうか
2023/05/19 14:09 Init-Excel:管理人による書き込み確認