• ベストアンサー

Excelのグラフ範囲をセル内容で指定したい

皆さんに知恵をお貸しいただきたく思います。 同じようなグラフをグラフ範囲を変えて複数作成するために、以下のようなことを考えています。 ・sheet1のA1セルにグラフ対象範囲を格納し、 例)[別のbook]sheet2!A1:E50 ・グラフの範囲にsheet1のセル内容を範囲として設定する ということをしたいのですが、うまくいきません。 indirect関数を使ってみたのですが、グラフのプロパティの範囲部分にはindirect関数は書けないようでした。 また、VBAでグラフ範囲を修正するマクロを書こうとしましたが、 SetSourceData Source:= Sheet("sheet1").range("A1") と書くと、当然ながらsheet1!A1そのものを範囲として認識してしまいます。 取得した値をrangeに変換する方法を知りたいです。 どうかよろしくお願いします。

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

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

次のようにされたらいかがでしょうか。 Sub Test() Dim RNG As String RNG = Range("A1").Value (中略) ActiveChart.SetSourceData Source:=Range(RNG), PlotBy:=xlColumns (後略)

raideso
質問者

お礼

ありがとうございます。 おっしゃるように試してみましたが、 ActiveChart.SetSourcerData~の行で Rangeオブジェクトは失敗しました:_worksheetオブジェクト というエラーが出てしまいました(T-T) Rangeの引数に文字列として範囲指定しているので うまくいくと思ったんですが。。。 RNGには範囲としたい値が取れています。 グラフ用ブックには、 ・データ範囲設定用シート ・グラフ があり、 データ用ブックには、 ・グラフの元となる表 がある状態です。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

>提示していただいた例でいえば、 cells(1,1)にa.addressを入れてある状態で、 この範囲値を元にグラフ描画をしたいと思っています。 よろしくお願いします。 質問でしょうか?であれば、下記を参考にしてください。 Source:=Range(rng),にすると文字列が範囲指定に戻ります。 Sub test01() Dim a As Range Set a = Application.InputBox("範囲", "", Type:=8) Cells(1, 4) = "Sheet1!" & a.Address rng = Cells(1, 4) Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Range(rng), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub

raideso
質問者

お礼

ありがとうございます。 テストしてみたところ、同一ブックでは正常に動作しました。 他のブックを参照するときの記述がまずいのでエラーが出ているようです。。。 しばらく自分で頑張ってみます。 セル範囲はこの方法で指定できることがわかりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

Inputメソッドで実現すると思います。 Sub test01() Dim a As Range Set a = Application.InputBox("範囲", "", Type:=8) Cells(1, 1) = a.Address End Sub を実行してみてください。自分がマウス等で指定した範囲が、文字列$A$5:$C$8のような形で返ると思います。 あとSheet名が必要なら、 Cells(1, 1) = "Sheet1!" & a.Address のようにすればよい。 --- さてグラフを描かせる場合は Sub test01() Dim a As Range Set a = Application.InputBox("範囲は", "範囲指定", Type:=8) Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=a, PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub で指定した範囲のグラフを描くと思います。 離れた範囲などで上手く行くかテストはやってませんが よろしく。

raideso
質問者

お礼

ありがとうございます。 Inputメソッドで選択範囲をセルに入力可能であることがわかりました。 提示していただいた例でいえば、 cells(1,1)にa.addressを入れてある状態で、 この範囲値を元にグラフ描画をしたいと思っています。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA(excel)でグラフのデータ範囲の取得

    excel2010の VBA利用者です。 グラフが書いてあって(種類は3D等高線グラフ)、 その元になるデータ範囲は 例えば ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$D$10") のようにすれば、シート1のRange("A1:D10")の範囲が設定できます。  では、  これの 逆に 設定でなくて、取得が出来ませんでしょうか?  つまり 上記の場合でしたら、範囲"A1:D10"を取得して、変数に代入したいのです。 もし、範囲としての取得が難しいならば、最低限 グラフの現在のデータ範囲の矩形範囲の縦横の、行数、列数の 取得だけでもなんとかしたいのですが、 何か方法はないでしょうか? 縦横数百セルの大き目の範囲を相手にしたいので、 Formulaプロパティで系列ごとに取得していく方法では煩雑になるので 何とかもっと 簡便な方法が無いものかと思っております 御教授のほど、よろしくお願いいたします。

  • グラフの範囲指定をVBAで可変にしたい

    1シートに複数のグラフがあり、値を入れて完成させているファイルがあります。 データ範囲が毎回違うため、いちいちグラフを選択し、範囲を変更しています。 系列:行 データ範囲:A列から~H列までだったり、A列からJ列までだったりします データがH列までの場合はI列は値が入っていませんが、L列からまた他のグラフのデータ範囲になっているという形です。 データが始まる位置はすべて固定です。 シートにある複数のグラフを一度に変更したいのですが、どのようにしたら良いのでしょうか? (選択しているグラフのグラフ変更ではなく、選択していないものも変更したい) 以下のようなマクロを仮で組んでみたのですが、うまく動きません。 よろしくお願いします。 Sub グラフ範囲変更() Dim lastcolumn As Integer lastcolumn = Range("A2").End(xlToRight).Column ActiveChart.SetSourceData Source:=Range(Cells(1, 1), Cells(1, lastcolumn)) End Sub

  • エクセルのマクロでCells(j,i)を使用してデータ範囲を指定してグラフを作成する方法

    エクセルのマクロでグラフを描く時に、2つの離れた列(1列目とi列目)のデータを Cells を使用して範囲指定をしたいのですが、エラーがでてしまします。どこが間違っているか教えていただけないでしょうか? よろしくお願いいたします。 下記の式では正常にグラフは作成されます。 ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:A19,C1:C19"), PlotBy _ ' :=xlColumns 下記表現でエラーが発生します。 Dim c1, c2, c3 As Range Set c1 = Worksheets("Sheet1").Range(Cells(1, 1), Cells(jmax, 1)) Set c2 = Worksheets("Sheet1").Range(Cells(1, i), Cells(jmax, i)) Set c3 = Union(c1, c2) ActiveChart.SetSourceData Source:=Sheets("Sheet1").c3, PlotBy _ :=xlColumns エラー内容 実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。

  • EXCELのマクロ グラフについて

    こんばんは、 グラフ作成のマクロをつくっています。 グラフ作成対象の範囲が不定なので、 範囲は、AA;KKという範囲にしました。 実はその表の、下部に合計欄がありました。 合計値項目があっても、グラフ化する方法があるかどうか?と、記録マクロの途中で ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("C7:D10"), PlotBy _:=xlColumns がありましたが、この分をコメントにしました。何か影響はありますか?

  • グラフのデータ範囲をCellsで指定するとエラー

    あるサイトを参考に、VBAでChartType が xlStockOHLC 形式のグラフを作成しようとしています。 ところがデータ範囲の指定方法で .SetSourceData Source:=wsdata1.Range("b1:e100"), PlotBy:=xlColumns あるいは i = 100 .SetSourceData Source:=wsdata1.Range("b1:e" & i), PlotBy:=xlColumns とすれば、正常に動作しますが、 .SetSourceData Source:=wsdata1.Range(Cells(1, 2), Cells(100, 5)), PlotBy:=xlColumns とすると、Rangeメソッドは失敗しました。_worksheetオブジェクト となります。 両者は同じ範囲を指定しているつもりなのですが、どこが間違いでしょうか。 Option Explicit Sub sample() Dim ws As Worksheet Dim wsdata0, wsdata1 As Worksheet Dim topPosition As Double Dim leftPosition As Double Dim width As Double Dim height As Double Dim chartObj As ChartObject Dim chart0, chart1 As chart Dim i As Integer 'グラフを作成するシートを指定 Set ws = Worksheets("Sheet1") Set wsdata0 = Worksheets("saya00") Set wsdata1 = Worksheets("saya01") 'グラフを表示させる位置を取得 ※例としてセル「G2」の位置を取得 With ws.Range("a1") leftPosition = .Left topPosition = .Top End With 'グラフの横と縦のサイズを設定 width = 1000 height = 500 'ChartObjectオブジェクトを作成 Set chartObj = ws.ChartObjects.Add(leftPosition, topPosition, width, height) 'ChartObjectオブジェクトの名前を設定 chartObj.Name = "saya" 'Chartオブジェクト(グラフ)を作成 Set chart0 = chartObj.chart With chart0 'グラフの作成元としてセル「B2」から一覧の範囲を指定 ' .SetSourceData Source:=wsdata.Range("b1:e100"), PlotBy:=xlColumns ' .SetSourceData Source:=ws.Range("b1:e100"), PlotBy:=xlColumns ' i = 100 ' .SetSourceData Source:=wsdata1.Range("b1:e" & i), PlotBy:=xlColumns .SetSourceData Source:=wsdata1.Range(Cells(1, 2), Cells(10, 5)), PlotBy:=xlColumns 'グラフの種類を「折れ線グラフ」に指定 .ChartType = xlStockOHLC 'グラフのタイトルを表示 .HasTitle = True 'グラフのタイトルを設定 .ChartTitle.Text = "saya-1" 'グラフのタイトルのフォントサイズを設定 .ChartTitle.Font.Size = "12" End With '後片付け Set chart0 = Nothing Set chart1 = Nothing Set chartObj = Nothing End Sub

  • Excel VBAでグラフの可変データ範囲の取得方法

    Excel2003を使用しています。 ExcelのVBAでグラフ作成のマクロを作る際に、 取得するデータの行数が可変だった場合にどうすればいいのか知りたいです。 現在は取得するデータの範囲を以下の様に取ってきています。 ActiveChart.SetSourceData Source:=Sheets("シート名").Range("B1:C5000"), PlotBy:=xlColumns ここで、データの範囲("B1:C5000")が可変だった場合のデータ範囲の取得方法を知りたいです。 例えば、("B1:C7000")や("B1:C10000")など。 具体的には"B1"のセルを選択して、 [Ctrl & Shift]を押しながら "→"、"↓" と操作を行なったときに選択される範囲をグラフのデータとして使用したいです。 途中、空白セルはない前提でかまいません。 データの終端を取得する「Endプロパティ」なるものが存在するようですが、 これを使用するのでしょうか? それとも別の方法があるのか・・・? 宜しくお願いします。

  • 任意のデータ範囲を手でドラッグ、グラフ作成のマクロ

    やりたいことは、グラフを作成するマクロです。 ほぼ記録マクロでいくと、グラフのソースが指定 .SetSourceData Source:=Sheets("グラフ作成ver.1").Range("A3:G33"), PlotBy:=xlRows A3:G33と範囲が固定されています。 任意のデータ範囲を手でドラッグしてグラフ作成のマクロを つくりたいのですが、グラフソースデータの個所でエラーに なります。 どうしたら、手でドラッグした任意のデータ範囲が反映される かを教えてください。

  • Excel:指定したデータ範囲を可変的に取得する方法。

    Excel:指定したデータ範囲を可変的に取得する方法。 現在、個人の労働時間の昨年度と今年度を月ごとに比較するグラフを作っています。 一人ひとりのグラフを新規シートに追加していくのですが、人数が多いのでこれをマクロに したいのです。 【sheet1の表(元データ)】 (A) (B) (C) (D) (E) (F) (G) (P) (1)      1月  2月  3月  4月・・・12月 (2) 1 社員A 20期 20 15.5 22.75 12 27.2 (3)    21期 12 12 26 10 13 (4) 2 社員B 20期 : : : : : (5)    21期 (6) 3 社員C 20期 (7)    21期 (8) 4 社員D 20期      21期 : : 【作りたいマクロ】 例)A2のセル[1]を選択して実行すると、社員Aのデータ範囲(B2~P3までと一行目の月単位行)を グラフ化し、新規シートに追加する。 ・上記例を他社員のデータ範囲にも使えるようにデータ範囲を可変的にしたい。 ・できればそのマクロをボタン化して、A列にそれぞれボタンを挿入したい。 ※A4[2]セルのボタンを押すと、社員Bのグラフが作成される。 下記にわかるところまでのコードを記します。(vba初心者で拙いコードですがお許しください) Sub Macro1() Range(Cells(1, 2), Cells(1, 18)).Select '1月~月平均の列 Range(Cells(2, 2), Cells(3, 18)).Select 'グラフ化する範囲 Cells(2, 2).Activate ActiveSheet.Shapes.AddChart.Select 'グラフ追加 'グラフデータの範囲設定 ActiveChart.SetSourceData Source:=Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1, 2), Worksheets("Sheet1").Cells(1, 18)) ActiveChart.SetSourceData Source:=Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(2, 2), Worksheets("Sheet1").Cells(3, 18)) ActiveChart.ChartType = xlColumnClustered ActiveChart.ApplyLayout (5) ActiveChart.Location Where:=xlLocationAsNewSheet, name:="グラフ" ActiveSheet.Move after:=Worksheets("Sheet1") Sheets("Sheet1").Select End Sub 上記のコードだと範囲指定しているため社員Aのグラフしか作成できません。 範囲を可変的にするために変数を使おうと考えているのですが、 どのように書いてよいのか混乱してしまって・・・ 皆様にご教授願いたいと思いましてこちらに質問させていただきました。 長文および読み辛くなってしまい申し訳ありません。 どうかよろしくお願いいたします。

  • エクセルのマクロでグラフオブジェクトを指定位置に移動?

    お世話になります。 エクセル2000のマクロで困っています。 Range("indirect(AR69)").Select Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("前年比").Range("indirect(AR69)"), PlotBy _ :=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="前年比 このマクロ(自動記述)でシート「前年比」にグラフオブジェクトを作りました。 このグラフを指定したセル位置に移動するのはどうすればいいでしょうか。 具体的にはセルAB5の左上の角にグラフの左上をピッタリ重ねたいのです。 あと、グラフオブジェクトに名前をつけて、このグラフを選択する時に名前で選択できるでしょうか。 "グラフ 6964"みたいに通し番号が付けられていて非常にやりにくいのですが。 よろしくお願いします。

  • エクセルVBAでグラフの範囲を設定する方法

    お世話になっています。 グラフ自体は、作成済みのものを使用して、データの範囲だけを 変更させる方法を考えています。 A列に、データが入っている範囲を選択して、選択したセル範囲を グラフのデータ範囲としたいと思います。 現在、作成したプログラムは以下のものです。 当たり前なんでしょうが、以下のものではエラーになります。 Loopコマンドで、アクティブになったセルをグラフのデータ範囲に 設定する方法を教えてください。 よろしくお願いします。 Sub グラフ作成() ' Dim 範囲 As String Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate Loop ActiveCell.Offset(-1, 0).Activate Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlUp)).Select   範囲 = ActiveCell ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SetSourceData Source:=Range(範囲) End Sub

声が出ない病気の原因とは?
このQ&Aのポイント
  • ジェットコースターに乗った際に意識が飛びそうになり、涙や過呼吸が止まらなくなる症状が出ました。その後も高所や早い乗り物などで発作が起きるようになりました。声が出ない理由は分かりませんが、一人でいるときは問題なく声が出せるそうです。
  • 病名が分からないため悩んでいます。ジェットコースターの影響で人と話すと声が出なくなり、高所や早い乗り物が怖くなりました。一人でいるときは声は出るので喉に異常はないと思います。
  • ジェットコースターに乗った際に意識が飛びそうになり、涙や過呼吸が止まらなくなる症状が出ました。その後も高いところや早い乗り物が怖くなり、声が出なくなりました。病名が分からず悩んでいるので、詳しい方の回答をお待ちしています。
回答を見る

専門家に質問してみよう