- 締切済み
Excelグラフの式の絶対番地を相対番地にするには
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
丁寧に補足ありがとうございました。 ーー 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コードを 修正必要。(略)
- imogasi
- ベストアンサー率27% (4737/17069)
>コピーしたいのですが もう少しやりたいことを、具体的に説明しないとよくわからないのでは。 補足が必要だろう。 貼り付け先はエクセルのシートか? 元データは、コピー後、どこに指定したいのか? あるいはSheet1(質問ではsheet11だが)で、グラフ化するデータ域を 変動したいのか? 形式を保存したいのは、元データの位置か、グラフの種類や形式か? いま、Sheet1に質問のグラフとデータがあるとして、単純にコピーして、 Sheet2に張り付けると、データはSheet1 のままで、Sheet1に見えている、グラフのままだが。 普通にやって、Sheet1の指定セル範囲の、データの(セルの値の)変動には、連動するようだが。 またVBAでの回答が出ても良いのか。
お礼
説明が分かり難くて申し訳ありませんでした。 あらためてしたかったことを説明させていただきます。 添付図の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にするにはどのようにすればよいでしょうか。 よろしくお願いします。
補足
一部誤記がありましたので訂正します。 (誤) 8行目のグラフ(現在グラフされているグラフ)を、 (正) 8行目のグラフ(現在選択されているグラフ)を、
お礼
教えて頂きましたコードを実行してみました。 VBAでグラフを描くことができました。 ありがとうございました。 >しかしこの関数まがいの=SERIS(・・)の引数を、 >数式バー部に変えて指定しても >グラフ化する対象セル範囲は指定できても、 >グラフを新規に描かせるとかはできないのでは。 数式バー部に式をそのままコピーしてもグラフはできませんが、グラフをコピーすると数式バー部に式もコピーされます。この式を修正すれば、グラフにも反映されます。 例えば、 今回のコードでF1(セル)のグラフだけを描かせた状態で、このグラフをF2にコピーすると、 F1と同じグラフがF2に描かれて、 このF2のグラフを選択すると、 数式バー部にF1の同じ式が表示されます。 このF2の式を、 (3行目のデータを参照するように)変更すれば、 グラフも書き換わります。 ここで$を消すことができれば解決するのですが・・・ よろしくお願いします。