在宅ワークのリアルをベテランとビギナーにインタビュー>>

VBA初心者です。(はじめてから3日目。。。)
もしかすると、すごい簡単なことなのかもしれなくて申し訳ないのですが、質問させてください。

二つの異なるシートのデータを使って、円グラフを作製しようとしています。
ですが、「アプリケーション定義またはオブジェクト定義のエラー」が出てしまいます。
どこが間違っているのかをご教授願えませんでしょうか。
よろしくお願いします。


Sub graph()
Charts.Add
With ActiveChart
.ChartType = xlPie
.SeriesCollection(1).XValues = Worksheets(1).Range(Cells(2, 3), Cells(2, 5))
.SeriesCollection(1).Values = Worksheets(2).Range(Cells(3, 2), Cells(3, 4))
.SeriesCollection(1).Name = Worksheets(1).Cells(1, 1)
.Location where:=xlLocationAsObject, Name:="sheet3"
End With

End Sub

ちなみに、各セルにはちゃんとデータが入っております。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

元のコードをなるべく変えないように


書き換えてみました。
以下のようにすれば、とりあえず動きます。

Sub graph()
With Charts.Add
.ChartType = xlPie
.Location where:=xlLocationAsObject, Name:="Sheet3"
End With
With ActiveChart
'仮のSeriesCollectionを設定
.SeriesCollection.Add Source:=Worksheets(1).Range("A1:B2")
.SeriesCollection(1).XValues = Worksheets(1).Range(Worksheets(1).Cells(2, 3), Worksheets(1).Cells(2, 5))
.SeriesCollection(1).Values = Worksheets(2).Range(Worksheets(2).Cells(3, 2), Worksheets(2).Cells(3, 4))
.SeriesCollection(1).Name = Worksheets(1).Cells(1, 1)
End With
End Sub
    • good
    • 0
この回答へのお礼

なるほど!!!
ありがとうございます!!!
rangeのところにもworksheetsの指定が必要なのですね!!!
勉強になりました、ありがとうございます!!!

お礼日時:2006/03/14 17:28

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QVBAで各シートの表でグラフを作成したいのですが

シートごとにレイアウトが同じ表がありまして、
VBAで各シートの表でグラフを作成したいのですが、
どうしても作成した時のシートのデータで出来てしまいます。
egシート1で表作成>シート2でVBA実行してもシート1でつくったグラフが複製されるだけ、、

どうすれば、選択中のシートのデータで表ができるのでしょうか??


一度グラフをコピーした上でデータを変える方法も試したのですが、
Sub Macro7()
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.SeriesCollection(1).Name = "=Sheet2!$B$29"
ActiveChart.SeriesCollection(1).Values = "=Sheet2!$B$31:$B$128"

結局シート2でしか出来ず、、です
「Sheet2!~」のところがいけないのはわかるのですが、、

この方法以外でもどんな方法でもよいのでどなたかお力かしてください。

シートごとにレイアウトが同じ表がありまして、
VBAで各シートの表でグラフを作成したいのですが、
どうしても作成した時のシートのデータで出来てしまいます。
egシート1で表作成>シート2でVBA実行してもシート1でつくったグラフが複製されるだけ、、

どうすれば、選択中のシートのデータで表ができるのでしょうか??


一度グラフをコピーした上でデータを変える方法も試したのですが、
Sub Macro7()
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveSheet.ChartObjects("グラフ 1").Activate
...続きを読む

Aベストアンサー

たとえばこんなカンジで。

sub macro1()
 with activesheet.chartobjects.add(100, 100, 600, 300)
 .chart.charttype = xlcolumnclustered
 .chart.setsourcedata source:=activesheet.range("A29:B128")
 end with
end sub


#何グラフを描きたいのか,ぐらいは情報提供をしてください。
 といってもこのぐらいは追加質問しないで,新しいマクロの記録で希望の種類のグラフを描かせるサンプルマクロを録って,参考にしてください。

#ご利用のエクセルのバージョンも,必ずご相談に明記するよう憶えておいてください。バージョンによって手当てが変わる場合もあります。今後のご参考に。

QExcelでシートの違うデータでグラフを作る方法

Excelのシート1~3にそれぞれ1月~3月の日付と売上と達成率が入力された表があります。
このシートの違う3つの表のデータを使って1月~3月までの売上と達成率を1つのグラフにすることは可能ですか?
やはり1枚のシートにまとめないと無理なのでしょうか?
どうしても作れなくて、困っています。
お分かりの方がいましたら、教えてください。

Aベストアンサー

シートをまたがるグラフは作れないようです。
であれば、一枚のシート(グラフ用)にまとめれば良いのです。
しかし、いままでのシートはそのまま使い、グラフ作成用シートにリンクで、貼り付けます。
(1)新しいグラフシートを用意する
(2)そのシートに1~3月の項目と売上げ、達成率の項目を作る。
...1月 2月 3月
売上.....  ... .....
達成率...  ... .....

(3)そのシートの1月のデータを入れたいセルを指定し、数式バーから=をクリック(もしくは=を入力)
(4)1月のデータの入っているシートを選択して、入力したいセルをクリックし、エンタを押す。(グラフ用シートに1月のデータが表示される)
その要領で同じ月のデータをコピー、またはフィルでデータをリンクさせる。
(5)2月のデータは、グラフ用シートの1月の下に同じ要領でリンクさせる。
同じ要領で3月のデータもグラフ用シートにリンクさせる。
(5)あとは、普通にグラフを作る要領で作成する。

売り上げと達成率は、スケールが違うので、グラフウィザードで、ユーザ設定、2軸の折れ線グラフもしくは2軸の棒グラフと折れ線グラフを選択します。

シートをまたがるグラフは作れないようです。
であれば、一枚のシート(グラフ用)にまとめれば良いのです。
しかし、いままでのシートはそのまま使い、グラフ作成用シートにリンクで、貼り付けます。
(1)新しいグラフシートを用意する
(2)そのシートに1~3月の項目と売上げ、達成率の項目を作る。
...1月 2月 3月
売上.....  ... .....
達成率...  ... .....

(3)そのシートの1月のデータを入れたいセルを指定し、数式バーから=をクリック(もしくは=を入力)
(4)1月のデータの入ってい...続きを読む

QVBAのグラフに違うシートの系列の追加について??

VBAでグラフに新たな系列を追加しようと思い
以下のプログラムを書きました。
しかしながら、 .
Valuesの値の指定の場所でエラーが発生しました。
また、
.XValues = Sheets(シート名(o)).Range(Cells(2, 1), Cells(行の数 + 1, 1))
.Values = Sheets(シート名(o)).Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1))

.XValues = Range(Cells(2, 1), Cells(行の数 + 1, 1))
.Values = Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1))
に直すとうまくいきました。

別のシートの値をグラフに設定する方法がわかっていないみたいなのですが、
やり方がよくわかりません。
もし、わかる方がいたら教えていただけないでしょうか?
よろしくお願いします。

以下、書いたプログラムです。

o=2
ActiveSheet.ChartObjects("グラフ1 " ).Activate
ActiveChart.SeriesCollection.NewSeries
'グラフの種類・データの範囲・凡例・2軸の使用を指定します
With ActiveChart.SeriesCollection(o)
'グラフの種類を設定 折れ線グラフ
.ChartType = xlXYScatterLines
'データの指定
.XValues = Sheets(シート名(o)).Range(Cells(2, 1), Cells(行の数 + 1, 1)) '←ここでエラーが出ます。
.Values = Sheets(シート名(o)).Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1))
'凡例の指定
.Name = シート名(o)
End With

VBAでグラフに新たな系列を追加しようと思い
以下のプログラムを書きました。
しかしながら、 .
Valuesの値の指定の場所でエラーが発生しました。
また、
.XValues = Sheets(シート名(o)).Range(Cells(2, 1), Cells(行の数 + 1, 1))
.Values = Sheets(シート名(o)).Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1))

.XValues = Range(Cells(2, 1), Cells(行の数 + 1, 1))
.Values = Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1))
に直すとうまくいきました。

別のシートの値をグラフに設定する方法...続きを読む

Aベストアンサー

よくあるRange(Cells(・・),Cells(・・))の2つのセルのシート名を特定していないときに出るエラーではないのか。
よく経験することだが、これかどうか。
(1)エラーコードぐらい質問に書くこと
(2)教えてもらうのだから、労を惜しまず、読者が直ぐ追試できるぐらいの配慮(コードを修正)をして質問に挙げること。
 質問者しかわからない部分があるコードが例で載っている。
ーー
Sheet1あ、B列
x
a2
b3
c4
d5
ーー
棒グラフを描かせた(折線でも良い)。これも質問に書いてない。
Sheet2 A列
A2以下に1
2
3
4
ーーー
質問コードをを改変
Sub test01()
o = 2
ch = ActiveSheet.ChartObjects(1).Name
ActiveSheet.ChartObjects(ch).Activate
ActiveChart.SeriesCollection.NewSeries
'グラフの種類・データの範囲・凡例・2軸の使用を指定します
With ActiveChart.SeriesCollection(o)
'グラフの種類を設定 折れ線グラフ
.ChartType = xlXYScatterLines
'データの指定
行の数 = Worksheets("Sheet1").Range("a65536").End(xlUp).Row
Set sh2 = Worksheets("Sheet2")
.XValues = sh2.Range(sh2.Cells(2, 1), sh2.Cells(行の数 + 1, 1)) '←ここでエラーが出ます。
.Values = sh2.Range(sh2.Cells(2, p + 1), sh2.Cells(行の数 + 1, p + 1))
'凡例の指定
.Name = "Sheet2"
End With
End Sub
これでエラーは出ずに、それらしく折線が追加されたが、参考にしてください。

よくあるRange(Cells(・・),Cells(・・))の2つのセルのシート名を特定していないときに出るエラーではないのか。
よく経験することだが、これかどうか。
(1)エラーコードぐらい質問に書くこと
(2)教えてもらうのだから、労を惜しまず、読者が直ぐ追試できるぐらいの配慮(コードを修正)をして質問に挙げること。
 質問者しかわからない部分があるコードが例で載っている。
ーー
Sheet1あ、B列
x
a2
b3
c4
d5
ーー
棒グラフを描かせた(折線でも良い)。これも質問に書いて...続きを読む

QエクセルVBAでグラフの線とマーカを設定したい

エクセルVBAでグラフの線とマーカを設定したいです。
グラフの線は無しでマーカの線が有りにしたいのですが、
マクロで記録したコードを見ると
グラフの線、マーカの線ともにFormat.Line.Visibleで指定しています。
実際にコードを記述しても、以下の様になり、グラフの線が表示されてしまいます。
ChartObjects("1").Chart.SeriesCollection(10).Format.Line.Visible = msoFalse

With ChartObjects("1").Chart.SeriesCollection(10).Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 102, 0)
.Transparency = 0
End With
グラフの線は無しでマーカの線が有りに設定は出来ないのでしょうか?

Aベストアンサー

With ChartObjects("1").Chart.SeriesCollection(10)
.Format.Line.Visible = msoFalse
.MarkerForegroundColor = RGB(255, 102, 0)
End With

あるいは下記で折れ線のみ塗りつぶしなしになります。
Border.ColorIndex = xlNone

QExcel VBAで、アクティブシート内の全てのグラフを削除したい。

VBA初心者です。
アクティブシート内の全てのグラフを削除するには、どのように記述すればよいのでしょうか?よろしくお願いします。

Aベストアンサー

こんにちは。

確か、
ActiveSheet.ChartObjects.Delete

この一行でよかったと思いますね。

QVBA グラフX軸の変更

A列:X軸(日付)
H列:Y軸(値)
といったようなグラフを作成するにはどのようなソースで組めばよいのでしょうか?
現在は以下のようなソースまで組めます。
あとは、A列の日付をX軸に設定するだけなのですが、コーディングがわかりません。
---------------------------------------------------------------
Dim chart1 As Chart
Set chart1 = Charts.Add
'H列グラフ化
chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
chart1.ChartType = xlLineStacked
chart1.HasLegend = False
---------------------------------------------------------------

どなたかアドバイスいただければ幸いです。

A列:X軸(日付)
H列:Y軸(値)
といったようなグラフを作成するにはどのようなソースで組めばよいのでしょうか?
現在は以下のようなソースまで組めます。
あとは、A列の日付をX軸に設定するだけなのですが、コーディングがわかりません。
---------------------------------------------------------------
Dim chart1 As Chart
Set chart1 = Charts.Add
'H列グラフ化
chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
chart1.Ch...続きを読む

Aベストアンサー

>あとは、A列の日付をX軸に設定するだけ...
この手作業を[マクロの記録]すればある程度は判ります。
>chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
これを

With Worksheets("Sheet1")
  chart1.SetSourceData .Range(.Cells(ROWINI, COLRUI), .Cells(iend, COLRUI))
  chart1.SeriesCollection(1).XValues = .Range(.Cells(ROWINI, 1), .Cells(iend, 1))
End With

こんな感じに変更すれば良いです。
.Cells(ROWINI, COLRUI)が項目名だったら、.Cells(ROWINI, 1)は.Cells(ROWINI + 1, 1)としたほうが良いかも。

もしくは、最初にグラフ元範囲をRange型変数にSetします。

Dim rng As Range
With Worksheets("Sheet1")
  With .Range(.Cells(ROWINI, COLRUI), .Cells(iend, COLRUI))
    Set rng = Union(.Cells, .Offset(, -7))
  End With
End With
With Charts.Add
  .ChartType = xlLineStacked
  .SetSourceData rng
  .HasLegend = False
End With
Set rng = Nothing

こんな感じ。

>あとは、A列の日付をX軸に設定するだけ...
この手作業を[マクロの記録]すればある程度は判ります。
>chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
これを

With Worksheets("Sheet1")
  chart1.SetSourceData .Range(.Cells(ROWINI, COLRUI), .Cells(iend, COLRUI))
  chart1.SeriesCollection(1).XValues = .Range(.Cells(ROWINI, 1), .Cells(iend, 1))
End With

こんな感じに変更すれば良いです。
.Cells(ROWINI, COLRUI)が項目名だったら、...続きを読む

Q複数シートからデータを拾ってグラフを作成したい

はじめまして。よろしくお願いします。
OS:WinXP、Excel ver.2000の環境です。
行いたい事はタイトルの通り、複数のシートにある表から任意のデータを拾い、それを元にグラフを作成したいのです。
例えば、
列に支店名、行に商品名の体裁の表があるとして、1ヶ月分をシート1枚に入力してあります。(項目の位置は統一されています)
シート12枚(1年分)のB2のデータをグラフにする場合、どのように行えばよいのでしょうか?

Aベストアンサー

2通りのやり方を紹介します。

1.とりあえず1つめのシートのデータでグラフを書きます。
グラフを選択-右クリック-『元のデータ』-『系列』タブ-『追加』-追加された『系列』クリック-追加データ範囲入力または入力欄の右側マーククリックして追加データ選択

2.1つめのシートのデータでグラフを書いた後、メニューから『ウインドウ』-『新しいウインドウを開く』で同じファイルをもうひとつ開きます。
後で開いたウインドウで2枚目のシートをクリックし、追加したいデータを選択して、先に開いていたウインドウのグラフの上にドラッグ&ドロップします。
別ウインドウが開くので、該当するものを選びOKをクリックします。

いずれのやり方の場合もシートの枚数分(12枚)繰り返せば完成します。

QVBAで散布図(グラフ)の作成

VBAでセルの値を読み込み散布図である折れ線グラフを作成しました。しかし、x軸に指定したい列も折れ線(xlScatterLines)で表示されてしまい思い通りになりません。どのようなキーワードでx軸を指定できるのでしょうか?ちなみに、そのグラフの[元のデータ]を参照するとやはりx軸の項目が空欄になっています。

Aベストアンサー

私なりにまとめてみました。参考になりますでしょうか。
反例などありましたら、指摘してください。
ここでは項目データが、列ごとに記録されているシートを考えます。
A列に体重、B列に身長、C列に年令などの例です。
(1)エクセルの散布図は2次元の図です。縦横の座標データが必要です。
また3つ以上あっても、2次元散布図では書けません。
シートに沢山(3列以上)の系列がある場合は、3系列以上指定するまたは指定しないと、それぞれが折れ線グラフで線なしの点グラフになってしまいます。
(2)2列の同行データでy軸、x軸で測って、交差する位置に点が描かれます。
(3)文字列の列があっても、2列しか数値データがない場合は、最初に出てくる数値列と次に出てくる数値列の2つが取り上げられます。
指定しないと、上例では体重と身長の散布図となります。
A列に近いほうから、最初にあるデータ列がX軸になり、次にあるデータ列がY軸になります。グラフウイザードの2/4でデータ範囲を、逆転させて
指定しても、逆になりません。列を入れかえるより他ないようです。
しかし隣り合わない、2つの列を指定したい(例えば体重と年令)場合は、体重列と年令列を(CTRLキーを押して)範囲指定して、グラフを描かせれば良い。
(4)そのほかに、Y軸の目盛の範囲を決めたいときは、一旦グラフを作成しY軸をクリックして、右クリックして、「軸の書式設定」を選び、「目盛」タブを選び、Y/数値軸目盛の最小値・最大値を指定します。身長であれば最小140、最大190とか指定します。X軸との交差点も指定します。
(5)あとX軸の目盛の範囲を決めたいときは、一旦グラフを作成しX軸をクリックして、右クリックして、「軸の書式設定」を選び、「目盛」タブを
選び、X/数値軸目盛の最小値・最大値を指定します。体重であれば最小50、最大90とか指定します。
(6)以上で目盛り線、凡例、タイトル、マーカー、データラベルなどを除いた、数値的な仕様が決まります。
--------
さて本題の、VBAでは
(A)散布図は
Charts.Add
ActiveChart.ChartType = xlXYScatter
(B)系列はActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:D7"), PlotBy:= _
xlColumns
この例ではA、C列は文字列の例でした。
列方向にデータ系列を考えるときはPlotBy:=xlColumnsです。
(C)グラフにするデータの列(と範囲)の指定は
C,D列に数値データがあるときの例では
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("C1:D7")
離れた範囲の場合は
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("C1:C7,E1:E7"),
(D)X軸の最高値と最低値、Y軸の最高値と最低値、交差する点を
定義するのは下記で行う。
ActiveChart.Axes(xlCategory).Select
With ActiveChart.Axes(xlCategory)
.MinimumScale = 50
.MaximumScale = 100
.CrossesAt = 50
End With
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
.MinimumScale = 20
.MaximumScale = 100
.CrossesAt = 20
End With

私なりにまとめてみました。参考になりますでしょうか。
反例などありましたら、指摘してください。
ここでは項目データが、列ごとに記録されているシートを考えます。
A列に体重、B列に身長、C列に年令などの例です。
(1)エクセルの散布図は2次元の図です。縦横の座標データが必要です。
また3つ以上あっても、2次元散布図では書けません。
シートに沢山(3列以上)の系列がある場合は、3系列以上指定するまたは指定しないと、それぞれが折れ線グラフで線なしの点グラフになってしまいます。
...続きを読む

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

マクロにてグラフを複数作成しようと考えています

しかし、ループを使用してグラフを作成すると
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

-------------------------------------

マクロにてグラフを複数作成しようと考えています

しかし、ループを使用してグラフを作成すると
1つ以上の場合エラーになってしまい作成できません

どのように作成したらよいのでしょうか?
2つ目以降のグラフObjectの名前が重なるからエラーになるとか、そういう部分での問題でしょうか?

-------------------------------------

Sub Graph
  For i = 1 To 2 'source_cnt
  Call Make_Graph(引数)
  Next
End Sub

-------------------------------------

Sub Make_...続きを読む

Aベストアンサー

標準モジュールに、質問のコードを一部手直しして、下記にして貼り付け実行しました。2つレーダーチャートを描きましたが。
後はご自分で改良してください。
Dim i
Sub Graph()
For i = 1 To 2 'source_cnt
Call Make_Graph
Next
End Sub
Sub Make_Graph()

With ActiveSheet.ChartObjects.Add( _
Left:=Cells(2, i * 5).Left, _
Top:=Cells(2, i * 5).Top, _
Width:=200, _
Height:=300)
.Chart.ChartType = xlRadar
.Chart.SetSourceData Source:=Range(Cells(1, 1), Cells(10, i)), PlotBy:=xlColumns
'.Chart.Location Where:=xlLocationAsObject, Name:=Worksheet.Name
.Chart.HasLegend = False
End With
End Sub

標準モジュールに、質問のコードを一部手直しして、下記にして貼り付け実行しました。2つレーダーチャートを描きましたが。
後はご自分で改良してください。
Dim i
Sub Graph()
For i = 1 To 2 'source_cnt
Call Make_Graph
Next
End Sub
Sub Make_Graph()

With ActiveSheet.ChartObjects.Add( _
Left:=Cells(2, i * 5).Left, _
Top:=Cells(2, i * 5).Top, _
Width:=200, _
Height:=300)
.Chart.ChartType = xlRadar
.Chart.SetSourceData Source:=Range(Cells(1, 1), Cells(10, i)...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング