• ベストアンサー

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

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

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

  • ベストアンサー
  • tarodaro
  • ベストアンサー率43% (7/16)
回答No.2

>[Ctrl & Shift]を押しながら "→"、"↓" とは異なりますが Range("b1").CurrentRegion >途中、空白セルはない前提でかまいません。 あってもいいです。どこかで繋がっていれば

harahachi
質問者

お礼

なるほど、これは便利ですね。 実は今回のケースではA列にもデータがあり、ここのデータも取ってきてしまったのですが、 必要なデータではないのでこの列を削除することで対応できました。 ありがとうございます。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

No1です。 Rng = Range(Range(Range("B1"), Range("B1").End(xlToRight)), Range(Range("B1"), Range("B1").End(xlToRight)).End(xlDown)).Address Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(Rng), PlotBy _ :=xlColumns ではどうでしょう?

harahachi
質問者

お礼

うまくいきました! ありがとうございます。 勉強になりました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

> 具体的には"B1"のセルを選択して、 > [Ctrl & Shift]を押しながら "→"、"↓" > と操作を行なったときに選択される範囲 その範囲なら、そのまんま Range(Range("B1", Range("B1").End(xlToRight)), Range("B1", Range("B1").End(xlToRight)).End(xlDown)) ですよ。

harahachi
質問者

お礼

ありがとうございます。 ですが、エラーになってしまいます・・・ 「実行時エラー '1004' アプリケーション定義またはオブジェクト定義エラーです。」 具体的には以下のようにしたのですが・・・ ActiveChart.SetSourceData Source:=Sheets(sheet_name). _ Range(Range("B1", Range("B1").End(xlToRight)), Range("B1", Range("B1").End(xlToRight)).End(xlDown)), _ PlotBy:=xlColumns

関連するQ&A

  • VBAでグラフ作成

    過去のログから色々探したのですが、原因が分かりません。お願いいたします。 エクセルのグラフの元データの範囲を ActiveChart.SetSourceData Source:=Sheets(\"sheet1\").Range(\"J11:M35\"), PlotBy:=xlColumns から ActiveChart.SetSourceData Source:=Sheets(\"sheet1\").Range(Cells(11, 10), Cells(35, 13)), PlotBy:=xlColumns に書き換えたら動かなくなってしまいました。 ナゼでしょうか? すいません、初歩で、、。お願いいたします。

  • VBAでグラフ作成

    過去のログから色々探したのですが、原因が分かりません。お願いいたします。 エクセルのグラフの元データの範囲を ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("J11:M35"), PlotBy:=xlColumns から ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(11, 10), Cells(35, 13)), PlotBy:=xlColumns に書き換えたら動かなくなってしまいました。 ナゼでしょうか? すいません、初歩で、、。お願いいたします。

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

  • エクセルのグラフ

    グラフが貼り付けられているシートを見えない状態でグラフ描画したいのですがうまくいきません ちなみに、今のコードはこうです。 Sub 電力力率表示() ActiveSheet.ChartObjects("グラフ 3").Activate ActiveChart.SeriesCollection(2).Select ActiveChart.SetSourceData Source:=Sheets(s_NAME) _ .Range("A2:C146"), PlotBy:=xlColumns 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' オブジェクトは、このプロパティまたはメソッドをサポートしていません。

  • グラフをセル範囲内に表示したい

    シート内に複数のグラフを表示させていますが、セル範囲から微妙にズレてしまい、 セルに記載した説明文との間隔がバラバラになってしまい、体裁が悪く困っています。 なんとか、セル範囲(行6,列4)に合わせてグラフを作成する方法を教えて下さい。 (エクセル2010) For I = 1 To 4 For J = 1 To 4 LA = LA + 1 ActiveSheet.ChartObjects.Add(J * 183 - 182, I * 2 * 123 - 225, 183, 105).Select ActiveChart.ChartType = xlLine ActiveChart.SetSourceData Source:=GFDT(LA), PlotBy:=xlColumns ActiveChart.Parent.Name = "GF" & LA Next J Next I

  • グラフのデータ範囲を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のマクロ グラフについて

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

  • VBA 選択しているデータでグラフを書きたい

    自分で選択している範囲を使ってグラフを書きたいのですが、 以下のコードに何と書けばよいのでしょうか? Selection.Addressと書くとエラーが出ます。 ActiveChart.SetSourceData Source:=”選択しているデータを使用する”

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

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