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

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

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

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

Q&A

解決済

1回答

2449閲覧

VBA グラフの凡例の文字が長すぎるので変更したい

koko2

総合スコア21

VBA

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

0グッド

0クリップ

投稿2020/04/20 12:00

自動で散布図グラフを作成するVBAを作成しています。

凡例はグラフの項目として設定された内容が表示され、元データとリンクしていますが、
元データは変更せず、グラフ上の表示を変更したいです。

例えばNNN5_AA_BBB_CCCという項目名をNNN5_だけ削除、BBBを一文字に置き換えなどをしたいと思っています。

グラフを作成する前に、5000行ほどあるエクセルのA列を作業列として絞りこんであるため、どうしても長くなっています。

|列1|列2|列3|列4|
|:--|:--:|--:|
|NNN5_AA_BBB_CCCC|7|5|9|
|NNN5_AA_BBB_CCCC|9|6|8|
AA20_BC_BBB_CCCC|7|5|8|
AA20_BC_BBB_CCCC|9|7|9|

グラフは項目ごとにNNN5_AA_BBB_CCCCで1つの系列、AA20_BC_BBB_CCCCでもう一つの系列でグラフで作成します。
一括で凡例を任意の英数字に変更したく、ご教示ください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コード例を考えてみました。
Worksheets(1).ChartObjects(1)の箇所は都合の良いように変えてください。

Sub Sample() With Worksheets(1).ChartObjects(1).Chart For i = 1 To .SeriesCollection.Count Dim str As String str = .SeriesCollection(i).Name ' ***strをRegExpのReplaceメソッドで置換*** .SeriesCollection(i).Name = str Next i End With End Sub

凡例を順にたどっていき、特定の条件を満たした文字列を''に置き換えたりすれば良いかと思います。
またここでは示していませんが、RegExpを使うには別途設定などが必要です。


追記
RegExpを具体的に使うコードを書いてみました。
動作確認はしていないので、そもそも動くかわかりません。

事前に参照設定で「Microsoft VBScript Regular Expressions 5.5」にチェック

VBA

1Sub Sample() 2 'RegExpオブジェクトの作成 3 Dim reg1 As Object, reg2 As Object 4 Set reg1 = CreateObject("VBScript.RegExp") 5 Set reg2 = CreateObject("VBScript.RegExp") 6 7 '正規表現の指定 8 With reg1 9 .Pattern = "^.*_" '正規表現を定義 10 .IgnoreCase = False '大文字と小文字を区別するかどうか 11 .Global = False '文字列全体を検索するかどうか(Falseだと最初の合致するパターンしか適用されない) 12 End With 13 14 With reg2 15 .Pattern = "BBB" 16 .IgnoreCase = False 17 .Global = True 18 End With 19 20 With Worksheets(1).ChartObjects(1).Chart 21 For i = 1 To .SeriesCollection.Count 22 Dim str As String 23 str = .SeriesCollection(i).Name 24 str = reg1.Replace(str, "") 'strをRegExpのReplaceメソッドで置換 25 str = reg2.Replace(str, "hoge") 'strをRegExpのReplaceメソッドで置換 26 .SeriesCollection(i).Name = str 27 Next i 28 End With 29End Sub

投稿2020/04/21 00:15

編集2020/04/21 05:10
programming

総合スコア476

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

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

koko2

2020/04/21 04:07

回答ありがとうございました。RegExpについてよく分からなかったので調べてみました。 Set reg = CreateObject("VBScript.RegExp") reg.Pattern = "[^]"   '検索パターン reg.IgnoreCase = True '大文字と小文字を区別しない reg.Global = True    '文字列全体を検索する ・ ・ 上記サンプルの6行目に入れていくということですか?
programming

2020/04/21 05:12

コード例を書き加えてみました 適当に書いているので、期待通りに動くかわかりません
koko2

2020/04/21 13:29

詳細に説明頂きありがとうございました。 教えて頂いたこと試してみます。 RegExp、こんな方法があったこと全く知らなかったので、本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問