excel グラフについて教えてください。

ひとつのsheetにグラフが90個ある状態で、sheetは支店ごとに7つあります。それぞれにデータのsheetとグラフのsheetとなっており、ひとつの支店のグラフ90個を完成させたので、それをコピーしてから、参照するデータを置換して次の支店のグラフをつくりましたが、グラフタイトルが置換できません。90個のうち45個のみタイトルがあり、他の45個のグラフにタイトルはないままにしたいです。
参照データを置換するBVAをサイトから見つけて、初心者の私が何とかグラフ自体はうまくできたのですが、タイトルのあるグラフのみ、一括で置換できるようなBVAを教えていただけないでしょうか。どうぞよろしくお願い申し上げます。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2020/03/02 09:03:48
id:gon_7

質問者から

gon_72020/03/05 21:53:15

質問に何が不足しているのかを教えてくださいまして、誠にありがとうございます。

補足をさせていただきます。

現状の45個のグラフは、「4月実績(A支店)」「5月実績(B支店)…のようになっており、それぞれに対になっているグラフがあり、これにはタイトルがついていません。参照するデータを置換して90個のグラフはB支店のものにできたのですが、タイトルがA支店のままなので、45個のタイトルを「4月実績(B支店)」のように、(A)のところだけ(B)に置換したいと考えております。残りの45個については

タイトルがないままにしたい、という希望です。支店のsheetが7つあることから、タイトル45個×7sheet分打ち直さずに、できればありがたい、という状況です。

よろしくお願い申し上げます。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

以下のコードを標準モジュールに貼りつけて、do_change サブルーチンを実行してみてください。

Sub change_graph_title(sheet_name, word, replace_word)
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = word

    For Each co In Worksheets(sheet_name).ChartObjects
        Set c = co.Chart
        If c.HasTitle Then
            If re.test(c.ChartTitle.Text) Then
                c.ChartTitle.Text = re.Replace(c.ChartTitle.Text, replace_word)
            End If
        End If
    Next
End Sub

Sub do_change()
    Call change_graph_title("Sheet1", "A支店", "B支店")
End Sub

以下の部分は、複数のシートがありそうなので、必要に応じて複数作ってください。

Sub do_change()
    '                        ↓をシートの名前分だけ変えて複製する
    Call change_graph_title("Sheet1", "A支店", "B支店")
    Call change_graph_title("Sheet2", "A支店", "B支店")
    Call change_graph_title("Sheet3", "A支店", "B支店")
End Sub
id:gon_7

A-kuma3 様

私のような者のために、お力を貸していただきましたことに、心から感謝を申し上げます。私も、誰かの役に立てるような人間になりたいと強く思いました。
このような能力をお持ちであることに対し、敬意とともに改めて御礼を申し上げます。
これから実行してみます。ありがとうございました!

2020/03/02 09:00:50

その他の回答0件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

以下のコードを標準モジュールに貼りつけて、do_change サブルーチンを実行してみてください。

Sub change_graph_title(sheet_name, word, replace_word)
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = word

    For Each co In Worksheets(sheet_name).ChartObjects
        Set c = co.Chart
        If c.HasTitle Then
            If re.test(c.ChartTitle.Text) Then
                c.ChartTitle.Text = re.Replace(c.ChartTitle.Text, replace_word)
            End If
        End If
    Next
End Sub

Sub do_change()
    Call change_graph_title("Sheet1", "A支店", "B支店")
End Sub

以下の部分は、複数のシートがありそうなので、必要に応じて複数作ってください。

Sub do_change()
    '                        ↓をシートの名前分だけ変えて複製する
    Call change_graph_title("Sheet1", "A支店", "B支店")
    Call change_graph_title("Sheet2", "A支店", "B支店")
    Call change_graph_title("Sheet3", "A支店", "B支店")
End Sub
id:gon_7

A-kuma3 様

私のような者のために、お力を貸していただきましたことに、心から感謝を申し上げます。私も、誰かの役に立てるような人間になりたいと強く思いました。
このような能力をお持ちであることに対し、敬意とともに改めて御礼を申し上げます。
これから実行してみます。ありがとうございました!

2020/03/02 09:00:50
  • id:a-kuma3
    今の人力検索には、この類の質問に回答する人は片手の指くらいの人数が居るはずですが、質問で提示されている内容だと具体性に欠けているところがあって答えずらい。

    ひとつのシートにグラフが90個あるのは分かりますが、
    - タイトルを変えたい45個のグラフの、タイトルを作るルール
    - タイトルをつけたくないグラフは、元々タイトルがついていないのをそのままにしたいのか、何かのルールで消したりしたいのか

    期待している回答は、貼り付けると一発で動くコードでしょうから、上記の辺りを提示しないと回答が書きづらいだろうなあ、と。
  • id:gon_7
    質問者からの補足を書き間違えていることに気づきました。現状「4月実績(A支店)」「5月実績(B支店)」と書いたのは、「4月実績(A支店)」「5月実績(A支店)」の間違いです。申し訳ありません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません