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

スポンサーリンク
[返信 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 グラフ元表の最終行

[返信 2] Re : VBAで作成したグラフの行列指定について
投稿者 : tek     投稿日時 : 2025/02/19(Wed) 13:20:09
初めて知りました。
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

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-05 18:11:35 )
タイトルとURLをコピーしました