• ベストアンサー

EXCEL2000で、グラフのデータ元を複数の範囲で指定するには??

続きざまに質問させていただきます。EXCEL2000でグラフを作成するマクロ構文 例)~.Chart.SetSouceData Range(*****),xlColumns で、「*****」の中に入力するデータの範囲が"可変"であり、なおかつ複数の範囲(例えば A1:B5とD1:D5 のように)を指定することをしたいのですが、どのようにすれば、実現ができますでしょうか? Range()の引数はカンマで区切って2コの引数しか使用できません。 ですので、考え方としては、表示したい複数の範囲が収まる一つの範囲として、グラフを作成、→ 表示をしたくないデータ系列を削除する?? でいいのかなぁ??と思ったんですけど私のVBAハンドブックでは全く歯が立たないです。。。どなたかよろしくお願い致します。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

うまく説明できるか分かりませんが、次のように事前にRangeのAddressを文字列で作って使用したりします。   Dim grpAdr As String '文字列を定義    ↓   grpAdr = "D3:E10"    ↓   ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(grpAdr) 範囲の結合の場合は、当然、文字列操作でAddressを作れますが、多数になると各RangeをUnionで結合してアドレスを取得したほうが楽でしょう。   Dim grpAdr1 As String '範囲1アドレス   Dim grpAdr2 As String '範囲2アドレス   Dim union_grpAdr As String '結合範囲アドレス    ↓   grpAdr1 = "D3:E13"   grpAdr2 = "D15:E25"   union_grpAdr = Union(Range(grpAdr1), Range(grpAdr2)).Address    ↓   ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(union_grpAdr)   ※文字列の結合では union_grpAdr = grpAdr1 & "," & grpAdr2 でできます。 上では grpAdr1 = "D3:E13" のように範囲は固定ですが、   Cot = 13 '←何かの計算で13が出たと思って下さい   grpAdr1 = "D3:E" & Cot と考えれば、文字列を作る時に可変領域の処理ができることになります。

jew_ish
質問者

お礼

回答ありがとうございます。大変助かります。本日試したところ、期待通りに実現できました。 > grpAdr1 = "D3:E" & Cot というテクニックも知らず、プログラムコードが短縮できて、こちらとしては大変お得でした。本当にありがとうございます。

その他の回答 (1)

  • ken88
  • ベストアンサー率26% (6/23)
回答No.1

私がExcelをわかってるわけじゃないんで、回答ではないんですが、わからないことがあると利用しているサイトをご紹介しておきます。 ここのQ&A掲示板には、質問をなげるとスゴイ勢いで回答が返ってきますよ。 参考サイト:モーグ

参考URL:
http://www.moug.net
jew_ish
質問者

お礼

あ~助かります~。VBA歴は全く無いので、分からない事だらけで調べるだけで時間がかかってかかって・・・。 ありがとうございます。利用させていただきます。

関連するQ&A

  • グラフのデータ範囲を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関数で列方向データの可変範囲グラフ作成

    こんにちは Excel2010を使用しています 関数にて行方向の可変範囲グラフの作り方サイトを参考にして列方向のデータを可変範囲グラフに しようとしているんですが、うまく作成出来ません。 下記のような列のデータを可変範囲グラフにするにはどうしたらよろしいでしょうか。 A B C D E 1 item a b c d 2 date 1 2 3 4 すみませんが、よろしくお願いいたします。

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

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

  • 【EXCEL】グラフをデータ範囲指定により変えたい

    お世話になります。 グラフ作成でつまづいています。こういった事は可能でしょうか。 データは下記のように入力されています。 --------------------------------- ◆売上目標マスタデータ(日付、目標金額) 2006/5/1 1000  2006/6/1 2000 2006/7/1 1500 ◆実績データ(売上日、売上金額、課コード) 2006/5/1 200 1 2006/5/1 150 1 2006/5/2 300 2 2006/5/4 400 1 2006/6/1 100 1 --------------------------------- このデータから日ごとに目標からどのくらい売上金額が達成されているか月別・課別で見ていきたいのです。 グラフにしますと --------------------------------- 縦:金額 横:日(1,2,3,4,・・・31) --------------------------------- グラフは課ごとに作成するとします。 ただ月ごとには作成したくないので、例えばどこか(例えばセル)に範囲指定で日付を入力しグラフが変わってくれればいいなと考えております。 例えば2006/5/1から2006/5/31とユーザーが入力するとすべての課グラフの日付が2006/5/1~2006/5/31の範囲に自動的に変わってほしいのです。 また2006/5/1から2006/7/31と入力するとすべての課グラフの日付が2006/5/1~2006/7/31の範囲に自動的に変わってほしいのです。 そしてグラフには月の目標金額が線か何か目印でわかるようになれば非常に助かります。 長くなりましたがこのような仕組みを構築する事は可能でしょうか。知恵をお貸し下されば幸いです。

  • 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のグラフしか作成できません。 範囲を可変的にするために変数を使おうと考えているのですが、 どのように書いてよいのか混乱してしまって・・・ 皆様にご教授願いたいと思いましてこちらに質問させていただきました。 長文および読み辛くなってしまい申し訳ありません。 どうかよろしくお願いいたします。

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

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

  • vba グラフ データ範囲設定

    今折れ線グラフを作成しています。 データの範囲設定で悩んでいます。 項目軸ラベルのセル範囲と、グラフデータのセル範囲を指定を以下のように設定し折れ線グラフを作成しました。 Set RngData = Union(Wb3Sh6.Range(Cells(範囲1, 1), Cells(範囲2 - 1, 1)), _             Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), _              Wb3Sh6.Range(Cells(範囲1, 18), Cells(範囲2 - 1, 18)), _              Wb3Sh6.Range(Cells(範囲1, 33), Cells(範囲2 - 1, 33)), _             Wb3Sh6.Range(Cells(範囲1, 34), Cells(範囲2 - 1, 34)), _             Wb3Sh6.Range(Cells(範囲1, 39), Cells(範囲2 - 1, 39)), _             Wb3Sh6.Range(Cells(範囲1, 40), Cells(範囲2 - 1, 40))) ActiveChart.SetSourceData Source:=RngData, PlotBy:=xlColumns ですが。 項目軸を「Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), 」 のみとしたいのに 項目軸が「Wb3Sh6.Range(Cells(範囲1, 1), Cells(範囲2 - 1, 1)), _             Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), _              Wb3Sh6.Range(Cells(範囲1, 18), Cells(範囲2 - 1, 18)), _              Wb3Sh6.Range(Cells(範囲1, 33), Cells(範囲2 - 1, 33)), _             Wb3Sh6.Range(Cells(範囲1, 34), Cells(範囲2 - 1, 34)), _             Wb3Sh6.Range(Cells(範囲1, 39), Cells(範囲2 - 1, 39)), _」 となってしまいます。 項目軸を確実に設定したいのですが、どうすればよいでしょうか。

  • [excel2007]可変範囲のグラフを含むシートのコピーについて

    [excel2007]可変範囲のグラフを含むシートのコピーについて ・やりたいこと 可変範囲を参照するグラフをシート内に作成し、 そのシートを複数コピーして、可変範囲を参照するグラフのまま利用したい。 ・現状 以下のサイトを参考に、可変範囲のグラフをシート内に作成しました。 http://www2.odn.ne.jp/excel/waza/graph.html#SEC13 しかしこのシートをコピーすると、 名前"label","value"は新しいシートに複製されますが、 グラフの参照範囲はその名前でなく、固定値(新しいシートのA2:A5など)になってしまいます。 可変範囲のままシートをコピーしたいです。 (excel2003だと、そもそもコピー前のシートを参照するようですが) ・環境 excel2007 可変範囲のグラフの作成方法は、上記サイトの方法に限定はしていません。 何か良い方法をご存知でしたら、ご教授ください。 よろしくお願いいたします。

  • VBA グラフを複数作成する場合

    マクロにてグラフを複数作成しようと考えています しかし、ループを使用してグラフを作成すると 1つ以上の場合エラーになってしまい作成できません どのように作成したらよいのでしょうか? 2つ目以降のグラフObjectの名前が重なるからエラーになるとか、そういう部分での問題でしょうか? ------------------------------------- Sub Graph   For i = 1 To 2 'source_cnt   Call Make_Graph(引数)   Next End Sub ------------------------------------- Sub Make_Graph(引数) With ActiveSheet.ChartObjects.Add( _ Left:=Range(***).Left, _ Top:=Range(***).Top, _ Width:=Range(***).Width, _ Height:=Range(***).Height) .Chart.ChartType = xlRadar .Chart.SetSourceData Source:= Range(***), PlotBy:=xlColumns .Chart.Location Where:=xlLocationAsObject, Name:=WorkSheet.Name .Chart.HasLegend = False End With -------------------------------------

  • グラフ可変範囲のデータ設定

    環境Excel2002です グラフ 1が棒グラフ2個、折れ線グラフ1個で作成されています Sheets("支社")に8支社のデータがあります グラフシートは1Sheetにしたいので グラフシートで支社を選択することにより Sheets("支社")の該当支社のグラフデータを取得します そうすると、グラフデータは可変範囲で設定することになります そのVBAが下記です ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection(1).Select With ActiveChart.SeriesCollection(1) .XValues = Sheets("支社").Range(Cells(497, i), Cells(497, i + 12)) .Values = Sheets("支社").Range(Cells(497, i + 1), Cells(497, i + 12)) End With .XValues = Sheets("支社").Range(Cells(497, i), Cells(497, i + 12)) のところで実行時エラー1004がでてしまいます エラー回避方法を教えてください

専門家に質問してみよう