EXCELマクロを用いてグラフの系列の参照元を置換

このQ&Aのポイント
  • エクセルでマクロを用いて、グラフの系列の参照元であるリンク数式を置換する方法を探しています。
  • 現在、試している手法では実行時エラーが発生しており、原因は.XValuesや.Nameがリンク数式を評価した後の値を配列で保持しているためだと思われます。
  • .XValuesや.Nameが保持しているデータが入っていたセルのアドレスを探すか、元のリンク数式を保持しているプロパティを探すことで文字列として置換できるのではないかと考えています。
回答を見る
  • ベストアンサー

EXCELマクロを用いてグラフの系列の参照元を置換

タイトルの通りですが、エクセルでマクロを用いて、グラフの系列の参照元であるリンク数式を置換する方法を探しています。 エクセルでグラフを作成した時に"元のデータ"を見ると、"系列"タブの中に"名前"、"Xの値"、"Yの値"を指定するテキストボックスがありますよね? あの中に書いてある文字列を置換したいんです。 以下の手法で作ってみたのですが、 『実行時エラー '13': 型が一致しません。』 というエラーが出てしまいます。 Sub Macro() Dim BeforeValue Dim AfterValue BeforeValue = "ここに置換元文字列を入れます" AfterValue = "ここに置換後文字列を入れます" For Each Value In ActiveChart.SeriesCollection With Value .XValues = Replace(.XValues, BeforeValue, AfterValue) .Values = Replace(.Values, BeforeValue, AfterValue) .Name = Replace(.Name, "BeforeValue", "AfterValue") End With Next Value End Sub 原因は.XValuesや.Nameがリンク数式を評価した後の値を配列で保持しているためだと思います。 そこで.XValuesや.Nameが保持しているデータが入っていたセルのアドレスを探すか、 あるいは.XValuesが評価している、元のリンク数式を保持しているプロパティ(か何か)を探せば文字列として置換できるのではないかと考えているのですがいかがでしょうか? "元のデータ"を開いた時にもちろんリンク数式が表示されるので、どこかにリンク数式が文字列として保持されているはずだと思うのですが…。 このプロパティについて何かご存知の方、あるいは違う方法をご存知の方いらっしゃいませんでしょうか? もしかしたら全然的外れの事をしているかもしれません。マクロを触り始めて日が浅いもので…。 その辺りの初心者的ミスも含めて間違い等、指摘して頂ける方でも結構です。 動作環境は OS:Win2000 EXCEL2003 VB6.5 です。 何かお分かりになる方、よろしくお願い致します。

  • QU_
  • お礼率95% (68/71)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>>どうしても置換したいと言う場合ですが、調べた限りでは、元の情報は持っていないようです。(あるのかも知れませんが) >>これは、a=2の場合、a=1+1で指定したのか、a=4-2で指定したのかわからないようなものです。 >そうなのですか?となると元情報の置換は出来ないということになってしまうのでしょうか……。 と自分で書いておいて、ふと考えて、excelのシート上で変更できるんだから、どっかで情報保存してるはずじゃないかと、もう一度調べてみました。 で、 ActiveChart.SeriesCollection(n).Formula に格納されていました。 http://msdn2.microsoft.com/ja-jp/library/microsoft.office.interop.excel.series.formula(VS.80).aspx 「オブジェクトの数式を、A1 形式で設定します。値の取得および設定が可能です」 とありました。 nは、そのチャートのグラフ数(1からActiveChart.SeriesCollection.count)です。 ここをReplaceしてみてはどうでしょうか?

QU_
質問者

お礼

出来ました(^▽^)! 下の方法で系列名、Xの値、Yの値をまとめて置換できるのを確認しました! For Each Value In ActiveChart.SeriesCollection With Value If (InStr( .Formula, BeforeValue)) Then .Formula = Replace( .Formula, BeforeValue, AfterValue) End If End With Next Value やはりFor Eachにしてあるのは、必要十分なだけ系列にアクセスするようにです(系列番号が抜けている場合もありますので)。 置換元文字列が含まれている場合だけ処理するように、一応If文をはさんであります。 ただ、Formulaの中には =SERIES(系列名,Xの値,Yの値,系列番号) のように格納されているようですので、置換する際は少し注意が必要なようです(特に","を含んだ置換やXの値だけ置換したい場合)。 また、要素が1つも無い系列(参照先が空白セルだったり)がある場合はエラーになってしまうようです。 その辺り、まだ少し詰めなくてはならない部分もありますが、置換するだけならこのコードで十分出来ますので、この質問はここで締め切りとさせていただきます。 fumufumu_2006さん、ありがとうございました!

その他の回答 (1)

回答No.1

まず、BeforeValue,AfterValueがどんな値かわからないのですが、 Replace(.Name, "BeforeValue", "AfterValue") は、BeforeValue,AfterValueの値に関係なく、"BeforeValue"と言う文字を "AfterValue"と言う文字に置換するだけです。 次に、エラーが出る.XValueの所で、 MsgBox VarType(.XValues) としてみてもらえば、8204を表示すると思います。 これは、8204=&h200Cで、配列 8192(&h2000)とVariant 12(&hC)で、variantの配列だとわかります。 と言う訳で、文字列変換の、Replace(.XValues, BeforeValue, AfterValue)と言う式はおかしい訳です。 ちなみに、VarType(.Name)=8(文字列)です。 話は戻って、XValues,Valuesは、Rangeオブジェクトか値の配列を設定してあげればいいので、 .XValues=Range("A2:A10") .Values = Range("B2:B10") とかしてあげればいいんじゃないかと思います。 Nameも.Name=Range("B1")とか、.Name="B列です"という風に設定すればいいだけだと思います。 と言う訳で、置換するのではなく、新たに設定してやればいいだけじゃないかと思います。 それと、For Each など使わずに、1つ目のグラフを変更するなら、 With ActiveChart.SeriesCollection(1) .XValues = Range("A2:A10") .Values = Range("B2:B10") .Name = Range("B1") End With としてあげればいいと思います。 どうしても置換したいと言う場合ですが、調べた限りでは、元の情報は持っていないようです。(あるのかも知れませんが) これは、a=2の場合、a=1+1で指定したのか、a=4-2で指定したのかわからないようなものです。

QU_
質問者

お礼

お礼が遅れて申し訳ありません。 BeforeValueは検索する文字列、AfterValueは置換後の文字列を格納する変数です。 仰るとおり、 .Name = Replace(.Name, "BeforeValue", "AfterValue") とすると変数としてではなく文字列として評価されてしまいますね。 途中で気付いて.XValuesと.Valuesの方は直したんですが.Nameの所だけ直し忘れていたようです。すいません。 For Eachを使ったのは、系列の数が一定でないので汎用性を持たせるためです。 こちらの環境で、.XValuesや.Valuesを新たに設定する方法ならどうやらうまく作動するみたいです。 ですが、グラフの数が多くて1つずつ修正するのが面倒なために置換プログラムを考えていたので、この方法だと結局グラフ毎にプログラムを書き直す必要があり、あまり意味がなくなってしまいます。 >どうしても置換したいと言う場合ですが、調べた限りでは、元の情報は持っていないようです。(あるのかも知れませんが) >これは、a=2の場合、a=1+1で指定したのか、a=4-2で指定したのかわからないようなものです。 そうなのですか?となると元情報の置換は出来ないということになってしまうのでしょうか……。

関連するQ&A

  • EXCEL 置換について

    教えてください。 日報を作るため、外部ファイルを参照した数式を使ったファイルを作成しました。(日報フォルダの中に個人名ファイルと月間集計ファイルがあります。月間集計ファイルから個人名ファイルを参照しています。) 1.月間集計ファイルを開くと「このブックには、安全でない可能性のある外部ソースが1つ以上含まれています。」とメッセージが表示されます。 リンクの編集から値の更新を選択し、OK表示がされても、次回は必ず不明になります。 起動時の確認で「メッセージを表示しないで、リンクの自動更新を行う」にすれば表辞されなくなりますが、気になります。 2.職場で使用したいのですが、セキュリティーのためファイルを無害化するサイトを通してからパソコンに入れるのですが、外部リンクがある数式は削除されてしまいます。 そこで数式をいったん文字列(=を’=に)置換し、それをまた数式に戻すために’=を=に置換をかけたのですが、一致するデータが見つかりませんとなり置換することができません。 文字列を数式に置換するにはどうすればできるでしょうか。 以上ご存じの方がいらっしゃいましたら、お教えください。

  • Excelの置換で教えてください。

    Excelの置換機能を使用し、以下のように設定して置換を行いました。 検索前の文字列:80,80,VALUE(F7) 置換後の文字列:80,80,VALUE(MID(F7,2,9)) 結果として以下の様に置き換わりました。 =IFERROR(IF(F7<>"",IF(LEFT(F7,1)="*",IF(VALUE(MID(F7,2,9))>80,80,VALUE(F7)),IF(VALUE(F7)>60,60,VALUE(F7))),IF(E7<>"",VALUE(E7),"")),"") ↓ =IFERROR(IF(F7<>"",IF(LEFT(F7,1)="*",IF(VALUE(MID(F7,2,9))>80,80,VALUE(MID(F7,2,9)),IF(VALUE(F7)>60,60,VALUE(F7))),IF(E7<>"",VALUE(E7),"")),"") このセル1つのみであればこれで完了ですが、 検索前の文字列:80,80,VALUE(F7) 置換後の文字列:80,80,VALUE(MID(F7,2,9)) この★F7★の部分が異なる内容のセルが膨大にあるので 一括で置換できる方法を探しています。 いい方法がありましたら教えてください。

  • < >を含む文字列のエクセルでの置換について

    < >を含む文字列のエクセルでの置換についておしえてください。 < や >を含むhtmlの文字列のSUBSTITUTE置換で悩んでいます。 < や >は数式の大なり、小なりと認識されるので置換ができないということですよね? これを置換するいい方法はないのでしょうか? たとえばhtmlテキストに含まれる<table width="800">という文字を <table width="600"><h1>時計</h1>に置き換えたいというような感じです。 エクセルに詳しくないもので出来るのかどうかよくわかりませんが とても困っているので教えていただけましたら助かります(>_<) よろしくお願いいたします。

  • 数式中の参照先のシート名の置換について

    先日、ブック間コピーによる数式の置換について質問をし、色々ご回答をいただくも結果が得られなかった者です。 ひとつの実験として、コピー前のシートで数式の参照名を置換してみてもダメだったので、数式の=の前に#を入れてやってみました。 参照先の「東京データ」を「大阪データ」と置き換えることはできたのですが、#=から=への置換ができません。この置換をしようとすると、先日ご回答をいただきながら出来なかった<リンク元の変更>の操作と同様の画面が現れ、結果ダメでした。 数式を単純に文字列として扱う方法はないのでしょうか?

  • エクセルの置換について

    セルに次のような数式が入っているときに数式の部分だけ置換する方法がありましたらご指導お願いします。 [B1] =SUM(A1+A2) →置換後 =A1+A2 [B2] =SUM(A10+A20) →置換後 =A10+A20 [B3] =SUM(A100+A200) →置換後 =A100+A200 置換する方法は「編集」-「置換」で 検索する文字列と置換後の文字列が分かりません。 SUM(で置換をかけると数式エラーで置換が出来ず SUM(*)で置換をかけると当然ですが全て消えます。 お手数ですが宜しくお願致します。

  • Excelの置換

    Excelで指定した列の文字列置換を行いたいのですが、 マクロを作成しないで、できる方法をご存知でしたら 教えてください。 具体的には列Aに あ い う あ と値が入っている場合に、あだけを空白にしたいのです。 よろしくお願い致します。

  • エクセル グラフで元のデータ部分を参照させたい

    自力では解決出来なかったので 知識、知恵のあるかた、助けてください! エクセルのグラフを書く際に X軸Y軸の値をいじるときに 元のデータを開きますが その元のデータ欄に入ってる参照数式を  別のセル 例えばA1セルに その数式を文字列で入力し 参照させてグラフに反映させることは出来ないでしょうか? 数式自体でなくても、例えば列名や行列番号などを セルに入力しそれをグラフの元データの参照部分に反映させたいのです。 元データを開いてy軸の参照部分を変更しながら グラフを大量に作成しておりますが セルに数字を入れるだけで参照箇所を変えることが出来ないでしょうか。 実際の 元のデータ x軸の値 「   」 ここに入れるべきセル参照の式を教えていただければ幸いです。 よろしくお願いいたします。

  • エクセル2003での置換について教えてください。

    エクセル2003での置換について教えてください。 こんにちは いつもお世話になっています エクセル2003での置換について教えてください。 特定の文字列以降の文字列を(特定文字列自身も含めて)削除したいのです。  特定の文字列は二つあります。【@】と【変化】です(【】も含みます)。  この二つの文字列はバラバラに出てきます。一方だけがでてくるセル、両方出てくるセル、両方出てこないセル、があるという意味です。  「*」を各特定文字の後ろに付けて、置換機能で削除していますが、二つの文字列に対して別々にやっています。 これを一度で置換して削除する方法を教えてください。  よろしくお願いします。

  • Excelの置換がうまく出来ません。

     Excelである文字列を検索しようとすると、ちゃんと検索できるのですが、それを別の文字列に「置換」しようとすると「一致するデータが見つかりません」のメッセージが出て置換できません。「一致するデータ」がちゃんと存在するにもかかわらずにです。  ところが「すべて置換」にするとちゃんとすべてその文字列が指定の文字列に置換出来てしまいます。  即ち、ちゃんと置換すべき文字列が存在するにもかかわらず「置換」だけが実行されないのです。  これってどうゆうわけでしょうか?  私としては、「すべて置換」ではなく、一つ一つ確認しながら文字列の置換を行いたいのですが・・・私のやり方が悪いのでしょうか?  尚、ここで言う「文字列」とは狭い意味のそれではなく、数値・記号を含む全ての文字と言う意味です。

  • エクセルの置換について

    すぐ教えていただきたいんです! エクセルの文字列(この文字列は行ごとにいろんな文字列なんですがその前にある決まった文字列を付け加えたい場合はどのようにしたらいいでしょうか? たとえば置換だと、行に入力したその文字列1パターンしか置換してくれないんですよね? なんだかつたない説明ですいませんが、お分かりになる方教えてください!

専門家に質問してみよう