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

このQ&Aのポイント
  • エクセルのマクロでグラフを描く際に、指定したデータ範囲が正しく反映されない場合があります。
  • 具体的には、Cells関数を使用してデータ範囲の指定をした際にエラーが発生することがあります。
  • このエラーの原因として、Cells関数が正しく動作しないことが考えられます。
回答を見る
  • ベストアンサー

エクセルのマクロで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' オブジェクトは、このプロパティまたはメソッドをサポートしていません。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

変更前: Source:=Sheets("Sheet1").c3 変更後: Source:=c3 とします。 #余談 よくやる間違い: Dim c1, c2, c3 As Range 正解: Dim c1 as range, c2 as range, c3 as range こうしないとc1,c2はrangeではなくvariantでDefineされます。

macchome
質問者

お礼

早々にご教授していただきまして、どうもありがとうございました。 Sheet1の定義がダブってしまっていたのですね。 また、Dim の定義方法についてもVariantになるとは、全く知りませんでした。 おかげさまで助かりました。深謝いたします。

関連する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

  • 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マクロでグラフを作成したいのですが、以下(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

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

  • エクセルのグラフのマクロでエラーが出てしまう

    グラフのマクロで Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("個人名シート").Range(.Cells(i, 4), .Cells(i, j - 1)), PlotBy _ :=xlRows X列項目範囲 = Range(.Cells(5, 4), .Cells(5, j - 1)) ActiveChart.SeriesCollection(1).XValues = X列項目範囲 ですが、X列項目範囲が1列だけ(4と変数j-1が同じ)だと最終行で 「実行時エラー'1004'; Series クラスの XValues プロパティを設定出来ません。」と出て しまいます。どなたかご教授下さい

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

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

  • EXCELで、範囲を検出してグラフを作成するマクロを作りたい!

    いつも本当にお世話になっております。 現在、データの範囲を検出して、グラフを作成するマクロを記録させて作っています。 ところが、範囲が固定されてしまい難儀しています。 下にそのマクロを転記いたしますので、ご指摘、ご指導頂ければと存じます。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/3/11 ユーザー名 : acmr ' ' Sheets("元データ入力").Select 上 = 3 左 = 1 下 = Range(Cells(上, 左), Cells(上, 左)).End(xlDown).Row 右 = Range(Cells(上, 左), Cells(上, 左)).End(xlToRight).Column Range(Cells(上, 左), Cells(下, 右)).Select Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("元データ入力").Range("A3:C459"), PlotBy _ :=xlColumns ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).XValues = "=元データ入力!R4C2:R459C2" ActiveChart.SeriesCollection(1).Name = "" ActiveChart.Location Where:=xlLocationAsObject, Name:="元データ入力" ActiveChart.HasLegend = False End Sub

  • エクセルマクロでのグラフ作成について

    エクセルのマクロでグラフを作成したいのですが 設定したい値のセルが行も列も飛び飛びなんです。このような場合、どうやってセルを設定すればいいか教えてください。 セルの自動マクロ記録でやってみると、例えばですが ActiveChart.SetSourceData Source:=Sheets("グラフ").Range( _ "A5,A10,A15,A20,A25,A30,A35,D5,D10,D15,D20,D25,D30,D35"), PlotBy:= xlColumns このような設定で希望通りのグラフが出来上がります。 A列(X軸)とD列(Y軸)の値で、列は固定で数行置きのデータでのグラフが作りたいのです。 しかもどの行かは固定ではありませんので、セルアドレスをそのまま入力するのではなく、Cells(,) で設定したいのですが、Unionを使ってみたり、色々試したのですが、うまくできません。 おわかりの方教えて頂けませんでしょうか。 よろしくお願いいたします。

  • エクセルで自動記録したグラフ作成マクロの編集方法

    エクセルに備わっているマクロの自動記録機能を使って、散布図のグラフを作成するマクロを作っています。 シートの名前が変わるとマクロが正常に働かない問題は、 Dim SheetName As String SheetName = ActiveSheet.Name と定義して、 ActiveChart.SetSourceData Source:=Sheets("Trial10").Range("CI1:CK7"), PlotBy _ :=xlColumns の "Trial10" を SheetName に書き換えれば動くようになることは分かったのですが、 ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R2C80:R101C80" 上記の場所で行き詰まっているようで、このような場合、どう書き換えればよいのかが分かりません。 どのように書き直せばよいのでしょうか。 ちなみに、マクロやVBAに関しては初心者です。 プログラムの知識も殆どありません。 どうか、ご教授をお願い致します。

専門家に質問してみよう