質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

6099閲覧

VBA:グラフの横軸ラベルの設定について

masafumi55

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2021/06/18 09:45

問題とやりたいこと

・横軸のラベルがインデックス表示になってしまいます。本来は、1列目を横軸として設定したいです。
下図の「BEFORE」が今回出力されるもので、本来は「AFFTER」のように横軸ラベル1列目を指定したいです。
イメージ説明

やってみたこと

ネットでいろいろ調べてもこのトラブルは一切紹介されておらず、いずれのサイト様も、「何の設定もなくグラフ表示とともに
AFFTERの状態」でした。わたしの環境がおかしいのでしょうか。。
以上、お忙しいところ恐れ入りますが、ご教示のほどお願い致します。

###CODE
以下のコードは、worksheets("Sheet1")が存在するxlsmファイルにコピペ実行で再現可能です。

Sub create_table() Dim r As Long Dim c As Long Dim i As Long Dim ii As Long Dim iii As Long Dim fields As Variant '表作成 fields = Array("年度", "売上高", 2017, 93979736, 2018, 90201580, 2019, 85474370, 2020, 71076570, 2021, 10782320) r = 6 c = 2 With ThisWorkbook.Worksheets("Sheet1") For ii = 1 To r For i = 1 To c .Cells(ii, i).Value = fields(iii) iii = iii + 1 Next i Next ii End With   'ここからグラフ作成 Call make_chart End Sub
Sub make_chart() Dim Po As Range Set Po = ActiveSheet.Cells(8, 2) With ActiveSheet.Shapes.AddChart.Chart .ChartType = xlLine .SetSourceData Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(6, 2)) .FullSeriesCollection(1).Delete .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "年度" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "金額" .HasTitle = True .ChartTitle.Text = "年度別売上推移" .Parent.Top = Po.Top .Parent.Left = Po.Left End With End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.FullSeriesCollection(1).Delete をコメントアウトしてみてください
A列の値のグラフが横軸近くに出現すると思います。

VBAは疎いのでこれを消している理由はわかりませんが、結果的には不要と思われます。

原因としてはA列が.FullSeriesCollection(1).Deleteが消されていたことと(<-追記 原因追加)、
A列が日付ではなく数値として認識されていたので、項目軸ラベルとして認識されなかったようです。
下記のやり方がうまいやり方なのかわかりませんが、日付として入力することで想定通りの結果がえられると思います。
A1セルは変換の必要がないのでifを使って A2列以下のA列という条件で、4桁の数値を日付に変換しています。

VBA

1Sub create_table() 2 3 Dim r As Long 4 Dim c As Long 5 Dim i As Long 6 Dim ii As Long 7 Dim iii As Long 8 Dim fields As Variant 9 10 '表作成 11 fields = Array("年度", "売上高", 2017, 93979736, 2018, 90201580, 2019, 85474370, 2020, 71076570, 2021, 10782320) 12 r = 6 13 c = 2 14 With ThisWorkbook.Worksheets("Sheet1") 15 For ii = 1 To r 16 For i = 1 To c 17 If i = 1 And ii > 1 Then 18 .Cells(ii, i).NumberFormatLocal = "yyyy" 19 .Cells(ii, i) = Format(Str(fields(iii)) + "/" + "01" + "/" + "01", "yyyy/mm/dd") 20 Else 21 .Cells(ii, i).Value = fields(iii) 22 End If 23 24 25 iii = iii + 1 26 Next i 27 Next ii 28 29 End With 30 'ここからグラフ作成 31 Call make_chart 32 33End Sub

こちらは .FullSeriesCollection(1).Delete をコメントアウトしただけです。

VBA

1Sub make_chart() 2 Dim Po As Range 3 4 Set Po = ActiveSheet.Cells(10, 4) 5 6 With ActiveSheet.Shapes.AddChart.Chart 7 8 .ChartType = xlLine 9 .SetSourceData Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(6, 2)) 10 '.FullSeriesCollection(1).Delete 11 .Axes(xlCategory, xlPrimary).HasTitle = True 12 .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "年度" 13 .Axes(xlValue, xlPrimary).HasTitle = True 14 .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "金額" 15 .HasTitle = True 16 .ChartTitle.Text = "年度別売上推移" 17 .Parent.Top = Po.Top 18 .Parent.Left = Po.Left 19 20 21 End With 22 23End Sub

結果こうなりました(追記 図追加)
イメージ説明

投稿2021/06/18 11:49

編集2021/06/18 11:53
Crimson_Tide

総合スコア509

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masafumi55

2021/06/19 02:27

とても丁寧なご回答誠にありがとうございます。返信がおそくなり申し訳ありません。  グラフ作成ははじめてだったので、わたしのコードにわたし自身理解が追い付いていないので、一つ目の原因である「.FullSeriesCollection(1).Delete」をいれてしまったことについては、わたし自身謎でした。今回の丁寧なご説明の中で理解を深めることができ感謝いたします。 (某サイト様参照させていただきました。https://mamemametochan.com/excel-41/)  もう一方の原因であった、1列の型の問題についても大変勉強になりました。まったく予想外の原因だったのでこれは生涯わからなかったでしょう。コードの修正もお手数おかけいたしました。 以上、問題を解決していただき大変恐縮です。誠に誠にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問