ExcelVBAのReplaceを使ってグラフの範囲を変更する

ExcelVBAのReplaceを使ってグラフの範囲を変更する

以前似たようなものを書いたことがあるんですが、もっと簡単で汎用的なものはできないかなーと思って、作ってみました。


前置き

前書いた記事。

自分で書いておいて何なんですが、これあんまり実用的じゃないですよねw 今あるグラフを選択して、そいつの範囲を簡単に変えたいじゃないか!と思いまして。

グラフ例

130819-1

こんなグラフがあったとします。折れ線じゃなくても問題ありません。(たぶん)

130819-2

グラフの名前(凡例)、グラフの値、項目軸ラベルはこのようになっています。ここをお手軽に変更したいんですよね。

先に解説

キモになるのはこちら。前書いたのもこっち使ったほうが簡単そう。

ActiveChart.SeriesCollection.Item(i).Formula

iは変数なので1とかにしてあげて、これをMsgBoxで表示してあげるとこんな式が出てきます。

130819-3

この内容をReplaceを使って変えてあげれば良さそうです。

Replace(対象文字列, 変更前文字列, 変更後文字列)

使い方はこんな感じ。

コード

Sub graph_change2()
  Dim str1 As String, str2 As String, i As Integer

  str1 = InputBox("変更前の値を入力してください")
  If str1 = "" Then Exit Sub
  str2 = InputBox("変更後の値を入力してください")
  If str2 = "" Then Exit Sub

  With ActiveChart
    For i = 1 To .SeriesCollection.Count
      .SeriesCollection.Item(i).Formula = Replace(.SeriesCollection.Item(i).Formula, "$" & str1, "$" & str2)
    Next i
  End With
End Sub

標準モジュールにこれをコピペして使ってみてください。11行目でReplaceしていますが、取得した「変更前」「変更後」文字列の前に「$」を追加しています。例えばA列を変更する際、シート名にAという単語が含まれていたらそちらも置換されてしまうのを防ぐためです。

使い方

130819-4

変更したいグラフをアクティブにしてからプログラムを起動させると、変更前の文字列を要求されます。

「=Sheet1!$C$3:$G$3」のGを変えてみます。なんで項目ラベルを大文字アルファベットにしてしまったんだろう…わかりにくいすみません(;´Д`)

130819-5

変更後の文字列も。数値(行)も出来ますが、半角じゃないと駄目かも。

130819-6

選択したグラフの全ての要素の「G」が「E」に書き換わりました。たくさんあるときなどに使えるかもですね。

公開日:2013/08/19

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)