ExcelVBAのReplaceを使ってグラフの範囲を変更する
以前似たようなものを書いたことがあるんですが、もっと簡単で汎用的なものはできないかなーと思って、作ってみました。
前置き
前書いた記事。
自分で書いておいて何なんですが、これあんまり実用的じゃないですよねw 今あるグラフを選択して、そいつの範囲を簡単に変えたいじゃないか!と思いまして。
グラフ例
こんなグラフがあったとします。折れ線じゃなくても問題ありません。(たぶん)
グラフの名前(凡例)、グラフの値、項目軸ラベルはこのようになっています。ここをお手軽に変更したいんですよね。
先に解説
キモになるのはこちら。前書いたのもこっち使ったほうが簡単そう。
ActiveChart.SeriesCollection.Item(i).Formula
i
は変数なので1とかにしてあげて、これをMsgBox
で表示してあげるとこんな式が出てきます。
この内容を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という単語が含まれていたらそちらも置換されてしまうのを防ぐためです。
使い方
変更したいグラフをアクティブにしてからプログラムを起動させると、変更前の文字列を要求されます。
「=Sheet1!$C$3:$G$3」のGを変えてみます。なんで項目ラベルを大文字アルファベットにしてしまったんだろう…わかりにくいすみません(;´Д`)
変更後の文字列も。数値(行)も出来ますが、半角じゃないと駄目かも。
選択したグラフの全ての要素の「G」が「E」に書き換わりました。たくさんあるときなどに使えるかもですね。
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。