• 締切済み

Excelグラフの式の絶対番地を相対番地にするには

Excelの挿入タブのグラフグループの棒グラフなどで、 グラフを作成すると、図のようなグラフが生成されます。 これを、コピーしたいのですが、 式が絶対アドレスで表示されていますので、 =SERIES(,sheet11!$B$3:$H$3,sheet11!$B$8:$H$8,1) これを相対アドレスにしたいのですが、 手で相対アドレスに書き換えても($を消しても)、 元の絶対アドレスに戻ってしまいます。 相対アドレスにするには、 どのようにすればよいでしょうか。 よろしくお願いします。(Windows10,Excel2016)

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

丁寧に補足ありがとうございました。 ーー SERIESの引数の意味 は https://www.relief.jp/docs/excel-graph-series.html に説明があります。 ーー  しかしこの関数まがいの=SERIS(・・)の引数を、数式バー部に変えて指定しても グラフ化する対象セル範囲は指定できても、グラフを新規に描かせるとか はできないのでは。<--不可能との断言は小生ごときにはできないが。 ーーー 取り敢えず小生の知識からの結論では、質問者のやり方では 実現しないのでは?の入力エリアに入力したりすることでは 実現できないのでは。 ーー 折角なのでVBAで考えてみました。 しかしかきが質問者の意図に合うかどうか自信はないが。 データ Sheet1の A1:C3に書きデータを作る。 A列   B列  C列 前期 今期 売上 234 345 粗利 56 78 ーー F列の行幅と列高を適当に大きくする。空き列であればどこでもよい。 このセルの位置にグラフを描かせるので、それなりのサイズにしないと 充分に表示できないから。 ーー 標準モジュールに Sub Macro2() m = InputBox("データ行番号") Set ch1 = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered) 'ch1.Activate cn = ch1.Name 'MsgBox cn ActiveSheet.ChartObjects(cn).Activate ActiveChart.SetSourceData Source:=Range("Sheet1!$A$" & m & ":$C$" & m) ActiveSheet.ChartObjects(cn).Top = ActiveSheet.Cells(m, "F").Top ActiveSheet.ChartObjects(cn).Left = ActiveSheet.Cells(m, "F").Left ActiveSheet.ChartObjects(cn).Width = ActiveSheet.Cells(m, "F").Width ActiveSheet.ChartObjects(cn).Height = ActiveSheet.Cells(m, "F").Height ActiveSheet.ChartObjects(cn).Chart.HasTitle = False End Sub をコピペする。 ーー 実行すると、行番号を聞いてくるので、2と入力する。 続けて実行すると、また行番号を聞いてくるので、3と入力する。 ーー 実行結果はSheet1を見てください。 ーー (行が多いと)2や3やをたくさん回数の応答するのは面倒なので For m=2 To 15 Next m のように複数連続列での自動化もできる。 各行のF列の列幅を指定して広げることもVBAでできる。 質問者の質問内容の通りに答えるには、多少上記VBAコードを 修正必要。(略)

yam2012
質問者

お礼

教えて頂きましたコードを実行してみました。 VBAでグラフを描くことができました。 ありがとうございました。 >しかしこの関数まがいの=SERIS(・・)の引数を、 >数式バー部に変えて指定しても >グラフ化する対象セル範囲は指定できても、 >グラフを新規に描かせるとかはできないのでは。 数式バー部に式をそのままコピーしてもグラフはできませんが、グラフをコピーすると数式バー部に式もコピーされます。この式を修正すれば、グラフにも反映されます。 例えば、 今回のコードでF1(セル)のグラフだけを描かせた状態で、このグラフをF2にコピーすると、 F1と同じグラフがF2に描かれて、 このF2のグラフを選択すると、 数式バー部にF1の同じ式が表示されます。 このF2の式を、 (3行目のデータを参照するように)変更すれば、 グラフも書き換わります。 ここで$を消すことができれば解決するのですが・・・ よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

>コピーしたいのですが もう少しやりたいことを、具体的に説明しないとよくわからないのでは。 補足が必要だろう。 貼り付け先はエクセルのシートか? 元データは、コピー後、どこに指定したいのか? あるいはSheet1(質問ではsheet11だが)で、グラフ化するデータ域を 変動したいのか? 形式を保存したいのは、元データの位置か、グラフの種類や形式か? いま、Sheet1に質問のグラフとデータがあるとして、単純にコピーして、 Sheet2に張り付けると、データはSheet1 のままで、Sheet1に見えている、グラフのままだが。 普通にやって、Sheet1の指定セル範囲の、データの(セルの値の)変動には、連動するようだが。 またVBAでの回答が出ても良いのか。

yam2012
質問者

お礼

説明が分かり難くて申し訳ありませんでした。 あらためてしたかったことを説明させていただきます。 添付図の4行目のグラフを 5,6,7,8,9,10,・・・,99行目にコピーして、 各行のデータを参照するようにしたいのです。 添付図のように、同じグラフを縦にずらっと並べたいのです。 VBAではなく手でコピーする場合です。 ここでは、説明を簡単にするために、 8行目のグラフ(現在グラフされているグラフ)を、 9行目にコピーして、 9行目のデータを参照する例で説明します。 8行目のグラフを9行目にコピーすると、 8行目のグラフの式が、 =SERIES(,sheet11!$B$3:$H$3,sheet11!$B$8:$H$8,1) となっているので、 9行目のグラフの式も、 =SERIES(,sheet11!$B$3:$H$3,sheet11!$B$8:$H$8,1) になる。このため、手で、 $B$8:$H$8を$B$9:$H$9に直す必要があります。 これを自動的に変化するようにするには、 8行目のグラフの式の$8が絶対アドレスではなく、 相対アドレスの8になっていればよい。 =SERIES(,sheet11!$B$3:$H$3,sheet11!$B8:$H8,1) となっていれば、 8行目のグラフを9行目にコピーすると、 9行目のグラフの式は、自動的に、 =SERIES(,sheet11!$B$3:$H$3,sheet11!$B9:$H9,1) となるはずである。 しかし、8行目のグラフの式の$B$8:$H$8を、 手で$B8:$H8に書き換えようとしても書き換わらない ので困っています。 8行目のグラフの式の$B$8:$H$8の部分を、 $B8:$H8にするにはどのようにすればよいでしょうか。 よろしくお願いします。

yam2012
質問者

補足

一部誤記がありましたので訂正します。 (誤) 8行目のグラフ(現在グラフされているグラフ)を、 (正) 8行目のグラフ(現在選択されているグラフ)を、

関連するQ&A