• ベストアンサー

グラフのデータ範囲を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

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.1

この場合Cellsがどこのシートか指定が必要ですので wsdata1.Range(Cells(1, 2), Cells(10, 5)), を wsdata1.Range(wsdata1.Cells(1, 2), wsdata1.Cells(10, 5)), PlotBy:=xlColumns とか With wsdata1 .Range(.Cells(1, 2), .Cells(10, 5)), PlotBy:=xlColumns End with にしてみてください。

qhtsige
質問者

お礼

実に素早いご返事ありがとうございます。 そうすればできました。 アクティブシートのみで、使う場合は不要なのでしょうね。 アクティブシートと選択シートの使い分けが少しわかったような気がして、大変勉強になりました。

関連するQ&A

  • エクセルのマクロを使ってデータ範囲が毎回異なるグラフを書きたいです

    あるシステムからデータをエクセルに落とすため、毎回、行や列の数が変わります。 テキスト本を見て下のようなマクロを作成しましたが、うまくいきません。どなたか教えていただけないでしょうか。 Sub グラフシート作成() Dim WS As Worksheet Dim Crt As Chart Range("A65536").End(xlUp).End(xlToRight).Activate Range("A1:" & Selection.Address).Select Set WS = Worksheets("Sheet1") Set Crt = Charts.Add With Crt .ChartType = xl3DBarStacked .SetSourceData Source:=WS.Range(ここに何を書けばいいのでしょうか?), PlotBy:=xlColumns .Name = "野菜栄養価表" End With Set WS = Nothing Set Crt = Nothing 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マクロによるグラフ作成時の元データの取得について

     Excelマクロでグラフを作成したいのですが、以下(1)のように書いたら、Grp1.Chart.SetSourceData・・・のところでエラーになってしまいました。そこで、Rangeのところを(2)の様に変更したら、うまくいきました。ただ、自分としては、(1)のようにRangeの中にCellsを使う書き方でやりたいのですが、そのようにはできないでしょうか。  なお、マクロ初心者なので、簡単な表現でお願いします。 (1) Sub グラフ挿入_Macro() Set Grp1 = Sheets("グラフ1").ChartObjects.Add(10, 10, 500, 200) Grp1.Chart.SetSourceData _ Source:=Sheets("データ").Range(Cells(3, 1), Cells(10, 2)), _ PlotBy:=xlColumns End Sub (2) Sub グラフ挿入_Macro() Set Grp1 = Sheets("グラフ1").ChartObjects.Add(10, 10, 500, 200) Grp1.Chart.SetSourceData _ Source:=Sheets("データ").Range("A3:B10"), _ PlotBy:=xlColumns End Sub

  • 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 に書き換えたら動かなくなってしまいました。 ナゼでしょうか? すいません、初歩で、、。お願いいたします。

  • グラフの削除をExcelVBAで行う

    こんばんは。同じシートの中にグラフを3つ作成し、 コマンドボタンを押すとグラフを削除し、新しいグラフを作成するようにしたいのですが、グラフの3つ目を削除のしようとするとエラーが発生してしまいます。 2つ目までは順調に消えるのですが、3つ目のグラフが削除されないのはなぜなのでしょうか。 色々教えていただき何とか形になってきたのですが、確認すると色々とぼろがでてきてしまい、困っています。 どなたか教えていただけないでしょうか。 宜しくお願い致します。 Sub Glafu() Dim chartobj As ChartObject Worksheets("ABC").Activate ActiveSheet.ChartObjects(1).Delete ActiveSheet.ChartObjects(2).Delete ActiveSheet.ChartObjects(3).Delete Set chartobj = Worksheets("ABC").ChartObjects.Add(600, 0, 300, 200) chartobj.Chart.SetSourceData Worksheets("ABC").Range(Range("b2").End(xlDown), ActiveCell.End(xlToRight)) With Worksheets("ABC").ChartObjects(1).Chart .HasTitle = True .charttaitle.Text = "タイトル1" End With Set chartobj = Worksheets("ABC").ChartObjects.Add(600, 200, 300, 200) chartobj.Chart.SetSourceData Worksheets("ABC").Range(Range("e2").End(xlDown), ActiveCell.End(xlToRight)) With Worksheets("ABC").ChartObjects(1).Chart .HasTitle = True .charttaitle.Text = "タイトル2" End With Set chartobj = Worksheets("ABC").ChartObjects.Add(600, 400, 300, 200) chartobj.Chart.SetSourceData Worksheets("ABC").Range(Range("h2").End(xlDown), ActiveCell.End(xlToRight)) With Worksheets("ABC").ChartObjects(1).Chart .HasTitle = True .charttaitle.Text = "タイトル3" End With End Sub

  • エクセルVBE実行時のエラーの意味とその対処方法

    Windows Vistaでエクセル2007を使用しています。 添付の画像のエクセルファイルのVBEに 本文最後のコードを記述して実行させようとすると 下記のようなエラーが出ます。 (実行内容はsheet1の表の内容を sheet2で円グラフとして作成することです) 『実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されてません』 ○質問 1.上記のメッセージの意味を教えてください 2.デバックすると10行目の 『Set Grp1 = WS2.ChartObjects.Add(50, 50, 320, 200)』 がデバックされます。この記述のどこがおかしかったのでしょうか? エクセルVBAにお詳しい方、何とぞご教示お願いします。 なお、コードの内容は以下の通りです。 Sub グラフ作成() Dim WS1 As Worksheet Dim WS2 As Worksheet Dim Grp1 As ChartObject Set WS = Worksheets("sheet1") Set WS = Worksheets("sheet2") Set Grp1 = WS2.ChartObjects.Add(50, 50, 320, 200) Grp1.Chart.ChartType = xl3DPieExploded Grp1.Chart.SetSourceData Source:=WS1.Range("C3:D14"), PlotBy:=xlColumns Worksheets("sheet2").Activate Set WS1 = Nothing Set WS2 = Nothing Set Grp1 = Nothing End Sub

  • 現在開いているbook全てを対象に処理したい

    Excel VBA で質問です。 現在開いている全てのbookを対象に処理したい場合どうすればよろしいでしょうか? *内容* Sub グラフ参照先変更() Dim wb As Workbooks Dim ws As Worksheet Dim myAd As String Dim myChart As ChartObject myAd = "A40:A70,I40:I70,N40:N70,S40:S70,X40:X70" >For Each wb In Workbooks For Each ws In Worksheets For Each myChart In ws.ChartObjects myChart.Chart.SetSourceData Source:=ws.Range(myAd), PlotBy:=xlColumns Next myChart Next ws Next wb End Sub >で現在エラーが起きています。 アドバイスよろしくお願い致します。

  • グラフ作成時のデータ取得について

    グラフ作成時のデータ取得について 下記コードにてグラフを作成したのですが データが2種類で20回分の連続データのグラフを作成したいのですが 下記のコードだと、4種類の10回分のグラフにしかなりません 元データはA13とA14にデータの見出し C13~L14までは第1回目から10回目までのデータ C16~L17までは第11回目から20回目までのデータが記入されてます setsourcedataの後のrange内をどのように変更すればよろしいでしょうか? ご教示願います Dim xlsheet As Worksheet Dim objChart As ChartObject Dim myrange1 As Range Set xlsheet = ActiveSheet For Each objChart In xlsheet.ChartObjects objChart.Delete Next Set objChart = Nothing With xlsheet.ChartObjects.Add(10, 50, 850, 180).Chart .HasTitle = True .ChartType = xlColumnClustered .SetSourceData Source:=Union(Range(Cells(13, 1), Cells(14, 12)), _ Range(Cells(16, 3), Cells(17, 12))) .Legend.Position = xlLegendPositionTop .HasTitle = False End With Set xlsheet = Nothing End Sub

  • 2本ある折れ線グラフの範囲をVBAで更新したい

    2本ある折れ線グラフの範囲をVBAで更新したいと考えております。 excel2003を使っています。 グラフ1の中に系統がひとつなら以下の内容でうまくいきますが、2本ある場合どうすれば 良いか分からず困っております。 Sub サンプル() Dim myPicture As StdPicture Dim buf As String Dim myR With Worksheets("Sheet1") myR = Application.WorksheetFunction.Count(Worksheets("Sheet1").Range("A5:A100")) End With row1 = "5" row2 = myR col1 = "A" Sheets("Sheet2").Activate ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(col1 & row1 & ":" & col1 & row2 + 4), PlotBy:=xlColumns End Sub 系統を増やした場合の書き方をどなたかお教え頂けませんか。 どうぞ、よろしくお願い致します。

専門家に質問してみよう