Excel VBA 質問スレッド №2085 (未解決)
VBAで作成したグラフの行列指定について
投稿者 : mine 投稿日時 : 2025/02/18(Tue) 14:17:59 OS : Windows 10 EXCEL : Excel 2016
元にした別表から指定した項目のデータ行のみを抜き出し、月ごとの集計をsumifで実施した表(A列に年月、B列に集計結果)を基にして、x軸に年月、y軸に集計数の棒グラフを表示するコードを書いています。
概ねグラフの出力はできたのですが、1点納得が出来ていない箇所があり、対処方法をご教示頂きたく、お願いいたします。
年月の項目が2データ以上ある場合、x軸には各年月が表示されますが、1データのみの時、y軸が年月にはならず、B列の項目名(B1セルの値)となってしまいます。
どのように直せばよいのでしょうか。
グラフ作成箇所のみコード記載します。
Set G = Worksheets("グラフ")
Dim ChartObject_1 As ChartObject
Dim G_s_LastRow As Long グラフ元表の最終行
G.Activate
Set ChartObject_1 = G.ChartObjects.Add(Left:=G.Range("K2").Left, _
Top:=G.Range("K2").Top, _
Width:=350, _
Height:=280)
ChartObject_1.Chart.HasLegend = False
ChartObject_1.Chart.SetSourceData G_s.Range("A1:B" & G_s_LastRow).CurrentRegion
ChartObject_1.Activate
ActiveChart.ChartType = xlColumnClustered
元にした別表から指定した項目のデータ行のみを抜き出し、月ごとの集計をsumifで実施した表(A列に年月、B列に集計結果)を基にして、x軸に年月、y軸に集計数の棒グラフを表示するコードを書いています。
概ねグラフの出力はできたのですが、1点納得が出来ていない箇所があり、対処方法をご教示頂きたく、お願いいたします。
年月の項目が2データ以上ある場合、x軸には各年月が表示されますが、1データのみの時、y軸が年月にはならず、B列の項目名(B1セルの値)となってしまいます。
どのように直せばよいのでしょうか。
グラフ作成箇所のみコード記載します。
Set G = Worksheets("グラフ")
Dim ChartObject_1 As ChartObject
Dim G_s_LastRow As Long グラフ元表の最終行
G.Activate
Set ChartObject_1 = G.ChartObjects.Add(Left:=G.Range("K2").Left, _
Top:=G.Range("K2").Top, _
Width:=350, _
Height:=280)
ChartObject_1.Chart.HasLegend = False
ChartObject_1.Chart.SetSourceData G_s.Range("A1:B" & G_s_LastRow).CurrentRegion
ChartObject_1.Activate
ActiveChart.ChartType = xlColumnClustered
スポンサーリンク
[返信 1] Re : VBAで作成したグラフの行列指定について
投稿者 : てらてら 投稿日時 : 2025/02/18(Tue) 20:26:26
こんにちは。
以下が間違っていると思います。
'ChartObject_1.Chart.SetSourceData G_s.Range("A1:B" & G_s_LastRow).CurrentRegion
ChartObject_1.Chart.SetSourceData G.Range("A1").CurrentRegion
CurrentRegionを使うのであれば、最終行は不要です。
'Dim G_s_LastRow As Long グラフ元表の最終行
こんにちは。
以下が間違っていると思います。
'ChartObject_1.Chart.SetSourceData G_s.Range("A1:B" & G_s_LastRow).CurrentRegion
ChartObject_1.Chart.SetSourceData G.Range("A1").CurrentRegion
CurrentRegionを使うのであれば、最終行は不要です。
'Dim G_s_LastRow As Long グラフ元表の最終行
[返信 2] Re : VBAで作成したグラフの行列指定について
投稿者 : tek 投稿日時 : 2025/02/19(Wed) 13:20:09
初めて知りました。
1データのとき文字列だとダメなようです。
手作業でもダメですが系列グラフ種類の変更で"集合縦棒"を選択すると最初は2つ出てきて右のを選ぶとokになり、
その後は選択肢が1つになります。(マクロでは選択できないと思います)
初めて知りました。
1データのとき文字列だとダメなようです。
手作業でもダメですが系列グラフ種類の変更で"集合縦棒"を選択すると最初は2つ出てきて右のを選ぶとokになり、
その後は選択肢が1つになります。(マクロでは選択できないと思います)
Sub Macro1() Dim Chart_1 As Chart Dim G As Worksheet If Not Application.Evaluate("isref(グラフ!a1)") Then Worksheets.Add.Name = "グラフ" End If Set G = Worksheets("グラフ") With G On Error Resume Next .ChartObjects.Delete On Error GoTo 0 .UsedRange.Clear .Range("A:A").NumberFormatLocal = "yy""年""m""月""" ' .Range("A1:B2").Value = [{"年月", "集計結果";"abc","10"}] '文字列だとだめ .Range("A1:B2").Value = [{"年月", "集計結果";"25年13月","10"}] 'これも文字列 ' .Range("A1:B3").Value = [{"年月", "集計結果";"25年13月","10";"25年14月","12"}] '2データはok .Activate Set Chart_1 = .ChartObjects.Add(.Range("E2").Left, .Range("E2").Top, 350, 280).Chart With Chart_1 .HasLegend = False .SetSourceData G.Range("A1").CurrentRegion .ChartType = xlColumnClustered End With Stop .UsedRange.ClearContents .Range("A1:B2").Value = [{"年月", "集計結果";"25年2月","10"}] '日付はok Chart_1.SetSourceData G.Range("A1").CurrentRegion End With End Sub
[返信 3] Re : VBAで作成したグラフの行列指定について
投稿者 : tek 投稿日時 : 2025/02/19(Wed) 15:03:38
時間できたのでプロパティ見直しました。
With Chart_1
.HasLegend = False
.SetSourceData G.Range("A1").CurrentRegion
.ChartType = xlColumnClustered
.PlotBy = xlColumns '追加でOK
End With
時間できたのでプロパティ見直しました。
With Chart_1
.HasLegend = False
.SetSourceData G.Range("A1").CurrentRegion
.ChartType = xlColumnClustered
.PlotBy = xlColumns '追加でOK
End With
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-05 18:11:35 )