ひとつのsheetにグラフが90個ある状態で、sheetは支店ごとに7つあります。それぞれにデータのsheetとグラフのsheetとなっており、ひとつの支店のグラフ90個を完成させたので、それをコピーしてから、参照するデータを置換して次の支店のグラフをつくりましたが、グラフタイトルが置換できません。90個のうち45個のみタイトルがあり、他の45個のグラフにタイトルはないままにしたいです。
参照データを置換するBVAをサイトから見つけて、初心者の私が何とかグラフ自体はうまくできたのですが、タイトルのあるグラフのみ、一括で置換できるようなBVAを教えていただけないでしょうか。どうぞよろしくお願い申し上げます。
以下のコードを標準モジュールに貼りつけて、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
質問に何が不足しているのかを教えてくださいまして、誠にありがとうございます。
補足をさせていただきます。
現状の45個のグラフは、「4月実績(A支店)」「5月実績(B支店)…のようになっており、それぞれに対になっているグラフがあり、これにはタイトルがついていません。参照するデータを置換して90個のグラフはB支店のものにできたのですが、タイトルがA支店のままなので、45個のタイトルを「4月実績(B支店)」のように、(A)のところだけ(B)に置換したいと考えております。残りの45個については
タイトルがないままにしたい、という希望です。支店のsheetが7つあることから、タイトル45個×7sheet分打ち直さずに、できればありがたい、という状況です。
よろしくお願い申し上げます。
ひとつのシートにグラフが90個あるのは分かりますが、
- タイトルを変えたい45個のグラフの、タイトルを作るルール
- タイトルをつけたくないグラフは、元々タイトルがついていないのをそのままにしたいのか、何かのルールで消したりしたいのか
期待している回答は、貼り付けると一発で動くコードでしょうから、上記の辺りを提示しないと回答が書きづらいだろうなあ、と。