VBA実行時エラー1004 rangeメソッド失敗 globalオブジェクトエラー

このQ&Aのポイント
  • VBA初心者の方がエクセルでグラフを作成する際に実行時エラー'1004'rangeメソッドは失敗しました。'_global'オブジェクトというエラーメッセージが表示され、マクロの実行ができない状況です。原因としては、Rangeメソッドを使用する際に変数の定義がまずい可能性があります。
  • 具体的には、Rangeメソッドの引数に不適切な値が指定されている可能性があります。例えば、Range("A8:A1587,e8:e1587")のような形式で指定されている場合、このような指定方法ではエラーが発生することがあります。変数を使用せずに直接セル範囲を指定するなど、適切な値を指定するように修正する必要があります。
  • このエラーの解決方法としては、範囲の指定方法を見直すことや、変数の定義を正しく行うことが重要です。また、デバッグを行いながらエラーの原因箇所を特定し、修正するようにしましょう。VBA初心者の方でしたら、VBAの基礎知識を学ぶことや、他の資料やサイトを参考にすることも有効です。
回答を見る
  • ベストアンサー

VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。 ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。 Sub 繰り返し() '繰り返し Dim s As Integer For s = 0 To 17 Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select Range("cells(8,s+2)").Activate Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _ "cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns ActiveChart.SeriesCollection(1).Name = "=""0810p2x""" ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = "0810p2x" .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t" .Axes(xlValue, xlPrimary).HasTitle = False End With Next End Sub

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.7

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所 >でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗 >しました。’global’オブジェクト) >しかし、何が原因でエラーになるか自分では分かりません。 ≪例1≫ Range(Cells(8, 1), Cells(1587, 2)).Select 上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。 ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select というわけです。 マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。 ≪例2≫ Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select 上記の例では、Rangeのみシート名が記述されています。 Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select というわけです。 Activeなシートが、Sheet2の場合はエラーになりません。 しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。 直前に、 Sheets("Sheet1").Select などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。 Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select と書いておけば安心です。 Withステートメントを使えばスッキリ纏めることができます。 With Sheets("Sheet2")   .Range(.Cells(8, 1), .Cells(1587, 2)).Select End With # Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。 >そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ >いましたら、教えていただけませんか? 私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。 「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。 新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。 躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。 Excel(エクセル)VBA入門:目次 http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404 エクセル入門・初級編 http://www.kenzo30.com/excel_kiso.htm

その他の回答 (7)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.8

>実行してみた結果、*の行でエラー’1004’RANGEメソッドは失敗しました:’ >global’オブジェクトというエラーがでました。 私が提案したコードですが、まずいところがあります。 回答番号:No.7の≪例2≫で説明した問題が起きているようです。 ActiveChart.SeriesCollection(1).XValues = Range("A8:A1587") の行を実行するときに、Activeになっているのは Chart.Add した ActiveChart つまり、グラフシートではないでしょうか? グラフシートには Range("A8:A1587") はありませんからエラーになるのは当然ですね。 ということで、 Range("A8:A1587") を、上位オブジェクトのWorkSheetで修飾すればOKになるはずです。 ヒントで止めておきます。 どこに、どのように記述すればよいか考えてみてください。

lucky222
質問者

お礼

xls88さん  遅くなりました。 おかげ様で回りました。ありがとうございます。 感動してます!!これからもよろしくお願いします。 それでは失礼致します。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

回答番号:No.5の回答内容で記述ミスがありました。 ActiveChart.SeriesCollection(1).XValues = Range("A1:A1587") は ActiveChart.SeriesCollection(1).XValues = Range("A8:A1587") です。

lucky222
質問者

補足

xls88さん 何度も申し訳ありません。 NO.6のように書き換えました。 しかし、実行してみた結果、*の行でエラー’1004’RANGEメソッドは失敗しました:’global’オブジェクトというエラーがでました。 確かにrangeの範囲、指定方法もこれで間違いはないかと思うのですが・・・・ しかし、回りません。  丸投げで申し訳ありません。 現状のプログラムを以下に示します。 Sub 実験繰り返し() Dim s As Integer For s = 0 To 3 Charts.Add ActiveChart.ChartType = xlXYScatter With Sheets("20081216_210647") ActiveChart.SetSourceData _ Source:=.Range(.Cells(8, s + 2), .Cells(1587, s + 2)), _ PlotBy:=xlColumns End With * ActiveChart.SeriesCollection(1).XValues = Range("A8:A1587") ActiveChart.SeriesCollection(1).Name = s ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=s With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = s .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text     = "t" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text     = "生" End With Next End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

>ひとつのグラフにひとつの列データというグラフを作りたい 現状では Source:=.Range(.Cells(8, 1), .Cells(1587, s + 2)) というように、矩形範囲を設定しています。 ですから、当然の結果、複数系列のグラフが描画されます。 1グラフ1系列、項目軸データはA列固定、ということなら以下のようになると思います。 With Sheets("20081216_210647")   ActiveChart.SetSourceData _     Source:=.Range(.Cells(8, s + 2), .Cells(1587, s + 2)), _     PlotBy:=xlColumns End With ActiveChart.SeriesCollection(1).XValues = Range("A1:A1587")

lucky222
質問者

お礼

xls88さん  遅くなりました。 おかげ様で回りました。ありがとうございます。 感動してます!!これからもよろしくお願いします。 それでは失礼致します。 

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

>回答番号:No.3 この回答へのお礼 Withが脱落していました。 With Sheets("20081216_210647")   ActiveChart.SetSourceData _     Source:=.Range(.Cells(8, 1), .Cells(1580, s + 2)), _     PlotBy:=xlColumns End With ここは、直していただけたのですね? エラーの出るコードを、一部だけでなく、全文拝見できないでしょうか。

lucky222
質問者

補足

xls88さん ありがとうございます。一応プログラムは回るようになりました。 しかし、出来上がったグラフに関してなのですが、エクセルのA列を横軸、続くB以下のアルファベットを縦軸としてグラフ0のB列、グラフ1にB,C列、グラフ2に、B,C,D列、・・・・・・というようなグラフが出来上がりました。・・・(ア)  自分の最終目標としてるのは、横軸をA列、続くB以降のアルファベットを縦軸にして、グラフ0にB列、グラフ1にC列、グラフ2にD列、・・・・というようなひとつのグラフにひとつの列データというグラフを作りたいと思っています。 (ア)のようになる原因は(イ))(以下プログラム中)だと思い、(イを以下の With Sheets("20081216_210647") ActiveChart.SetSourceData _ Source:=.Range( _ Range(Cells(8, 1), Cells(1580, 1)), _ Range(Cells(8, s + 2), Cells(1580, s + 2))), _ PlotBy:=xlColumns End With と書き直したのですが上手くいって無いのが現状となります。 以下は(ア)のプログラムとなります。!:(イ) Sub 成功繰り返し() Dim s As Integer For s = 0 To 3 Charts.Add ActiveChart.ChartType = xlXYScatter !With Sheets("20081216_210647") !ActiveChart.SetSourceData _ ! Source:=.Range(.Cells(8, 1), .Cells(1587, s + 2)), _ ! PlotBy:=xlColumns !End With ActiveChart.SeriesCollection(1).Name = s ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=s With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = s .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "生" End With Next End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

進んでいますか? SetSourceDataで、PlotBy:=xlColumnsとなっていますから 現在指定しているセル範囲の1列目は項目になっていると思います。 Sourceで、現在指定しているセル範囲の、2列目からを指定するようにすれば良いと思います。 それから、セル範囲の指定ですが、左上隅セルと右下隅セルを指定すればよいので ActiveChart.SetSourceData _   Source:=Sheets("20081216_210647").Range( _   Range(Cells(8, 1), Cells(1580, 1)), _   Range(Cells(8, s + 2), Cells(1580, s + 2))), _   PlotBy:=xlColumns は、 ActiveChart.SetSourceData _   Source:=Range(Cells(8, 1), Cells(1580, s + 2)), _   PlotBy:=xlColumns と出来ると思います。 シートを明示するなら、Rangeだけだなく、Cellsも修飾しなければ意味がないと思います。 Sheets("20081216_210647")   ActiveChart.SetSourceData _     Source:=.Range(.Cells(8, 1), .Cells(1580, s + 2)), _     PlotBy:=xlColumns End With

lucky222
質問者

お礼

xls88さん お気にかけて頂き、ありがとうございます。 現状としては、上手く進んでいません。 ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗しました。’global’オブジェクト) しかし、何が原因でエラーになるか自分では分かりません。 原因はやはり、自分の基礎的な部分が無いからだと思います。 そこで自分で基礎を勉強したいのですが推薦できる参考書などがございましたら、教えていただけませんか?

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

> また新たにグラフのx軸に指定したい列の数値まで、 > グラフにプロットされるという違う問題がでてきました ActiveChart.SetSourceData _   Source:=Sheets("20081216_210647").Range( _   Range(Cells(8, 1), Cells(1580, 1)), _   Range(Cells(8, s + 2), Cells(1580, s + 2))), _   PlotBy:=xlColumns 上記で、SetSourceDataに指定するセル範囲を書きなおしてください。 プロットするデータがあるセル範囲に変えればよいです。 そして、項目軸ラベルに使用する範囲指定を追加します。 (例にあげたセル番地は出たらめです。実態に合わせてください。) ActiveChart.SeriesCollection(1).XValues = Range("A1:H1")

lucky222
質問者

補足

ありがとうございます! 早速試してみます。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

> Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select 上記は Range("A8:B1580").Select というようにしたいのでしょうか? Rangeの引数がダブルクオーテーションで囲まれています。 定数ということで、折角の変数Sが、単なる文字列化しています。 sの値が反映されません。 やるなら Range(Range(Cells(8, 1), Cells(1580, 1)), Range(Cells(8, s + 2), Cells(1580, s + 2))).Select というようにします。

lucky222
質問者

お礼

ありがとうございます。「実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー」の表示はなくなりました。 しかし、また新たにグラフのx軸に指定したい列の数値まで、グラフにプロットされるという違う問題がでてきました。この列をx軸に指定する事はできますか?  違う質問になり、まことに申し訳ないのですが、もしよろしかったら、教えていただけませんか?

関連するQ&A

  • Sub M()

    Sub M() Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range("A1:A289,B289").Select Range("B289").Activate Range(Selection, Selection.End(xlUp)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("08.31_n3_rev477_fai0_x300_y20_z"). _ Range("A1:B289"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T[sec]" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "U[v]" End With Sheets("08.31_n3_rev477_fai0_x300_y20_z").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range("A1:A289,C289").Select Range("C289").Activate Range(Selection, Selection.End(xlUp)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("08.31_n3_rev477_fai0_x300_y20_z"). _ Range("A1:A289,C1:C289"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T[sec]" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "U[v]" End With End sub このプログラムなのですが、 A289をx軸 B289~IV289までがy軸 上のプログラムをIV289までまわそうとFor文を 使って繰り返そうとしていますが、うまくできません。 どのようにFor文を使ったらいいでしょうか? サンプルをお願いします。

  • 自動グラフ作成マクロの作り方に関してアドバイスを下さい

    Sub Macro4() For i = 4 To 8 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=zero!R13C1:R1013C1" ActiveChart.SeriesCollection(1).Values = "=zero!R13C" & i & ":R1013C" & i ActiveChart.SeriesCollection(1).Name = "=zero!R12C" & i ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x axis" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y axis" End With Next End Sub これはzeroというシートから自動的に複数のグラフを作成するマクロなのですが、 これを現在選択しているシートにするためにはどうすれば良いのでしょうか? それと作成するグラフの名称を自分で設定したセルの内容にしたいのですが、 どうすれば良いのでしょうか? よろしくお願い致します。

  • 任意にデータの範囲を選択し、グラフを描画したい

    質問を閲覧していただきありがとうございます。 できればみなさんのお力を貸していただきたいことがあり、質問しました。 以下にマクロ作成に用いたプログラムの仕様とコードを貼りますので、ご指摘等いただけましたら幸いです。 まず、今回のマクロの目的は ・既に存在するエクセルデータから、x軸、y軸のデータ列の長さに応じたグラフを描画するVBプログラムを書く事 です。 ・可能ならば、既存のふたつのグラフを結合したものを新しく表示する ※データシートの画像は添付しましたのでご覧ください。 以上のふたつとなります。 理想形としては、 A2 ~ A1025までをx軸のデータ、B2~B1025までの実データ値としたグラフAを一つ D2 ~ E1025までをx軸のデータ、E2~E1025までの実データ値としたグラフBを一つ 上記二つのグラフを結合したグラフを一つ の3つのグラフが自動的に作成され、エクセルファイル上に表示されている といったような感じです。 私の書いたコードの問題点としては、 ・グラフAグラフBともに「x軸と実データが正しく対応していない」 →本来両方のグラフにおいてはグラフの右端まで折れ線グラフが続いているはずですが、x軸の値にして約1000の所でデータが終わってしまっています。 ・グラフBでは、D2 ~ D344, E2 ~ E344 を基にしたグラフ一つのみが描画されているはずですが、ここには何故か二つ以上の折れ線グラフがあるようにみえ、グラフB右には系列1~5までがあるように書かれています。(理想としては5個ではなく実データを示すもの一つのみ) ・ふたつのグラフの結合方法が不明 という感じです。 以下にプログラムを貼ります。 お時間ありましたら、ご指摘の程宜しくお願い致します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub グラフ描画() chart_title1 = "グラフA" chart_title2 = "グラフB" '軸のタイトル x_title = "周波数[Hz]" y_title = "パワー" ' -------------------------グラフ作成---------------------- ' グラフを描画 Dim chartObj1 As ChartObject Set chartObj1 = ActiveSheet.ChartObjects.Add(1, 1, 300, 200) With chartObj1.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("B2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("A2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With Dim chartObj2 As ChartObject Set chartObj2 = ActiveSheet.ChartObjects.Add(1, 320, 300, 200) With chartObj2.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("E2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("D2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • エクセルVBAで自動チャート作成。 エラーになります

    シート1に複数のデータが縦に入っています(A3:A90、B3:B90,C3:C90 といった具合です)データの数は30個です。 それぞれのデータを個々のチャートにして別のシート(シート名: Chart1)に並べて表示させたいです。 それで以下の様なコードを書きました。 このコードはうまく動くのですが、同じようにシート2のデータをChart2のシートにチャートを出そうと思って、4行目の・・・Source:=Sheet1.Range(Cells(3, j)・・・のところをSource:=Sheet2.Range(Cells(3, j)にして実行するとエラーになります。 何故だか分からなくて困っています。 対処方法を教えてください。 エラーは Run-time error ‘1004’: Application-defined or Object-defined error です。 お願いします。 For j = 1 To 30 Set ch = ActiveSheet.ChartObjects.Add(10, 5 + j * 105, 500, 100) ch.Chart.ChartType = xlColumnClustered ch.Chart.SetSourceData Source:=Sheet2.Range(Cells(3, j), Cells(90, j)), PlotBy:=xlColumns ch.Chart.Location where:=xlLocationAsObject, Name:="Chart1" With ch.Chart .HasTitle = True .ChartTitle.Characters.Text = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With Next j

  • Excelでのグラフ作成用マクロについて。

    「新しいマクロを記録する」でグラフ作成用のマクロを作りました。 内容は、 1.sheet1のBC列を散布図でsheet2に出力。(4つほど別々のグラフを作成) 2.プロットエリアの拡大 3.図の位置調整・図の大きさ調整。(4つが重ならないように) というものです。 一応出来たのですが、何故か選択列を変更して(マクロ内の列選択を変更)出力・プロットエリア拡大までは出来るのですが、3が出来ません。 それで、分からないなりにマクロ内を覗いてみたところ、図の位置を調整する際に、対象となる図が ActiveSheet.Shapes("グラフ 17").IncrementLeft -177.75 などと言うように、グラフ17を参照してしまっているためにうまく動かないのだと思いました。 (そもそも、名前なんて付けていないはず・・・と思って調べていたら、どうやら「グラフウインドウ」で見ることが出来る名前を参照しているようでした。) いっそのこと、グラフをクリック・ドラッグで移動させるのではなく、出力する際に整然と並ぶように設定したいです。どうすればよいでしょう? 一応、作成したものを載せておきます。 ・1~2 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "mass" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "counts" End With ActiveChart.HasLegend = False ActiveChart.PlotArea.Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Selection.Top = 1 Selection.Width = 323 Selection.Height = 180 Selection.Left = 15 Selection.Width = 334 Selection.Height = 194 ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = 0 .MaximumScale = 50 .MinorUnitIsAuto = True .MajorUnit = 5 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With End Sub 3. ActiveSheet.Shapes("グラフ 17").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 17").IncrementTop -105.75 End Sub

  • マクロで記載されたプログラムの意味を知りたいです。

    マクロの記録でグラフを作って少して手直ししたのですが、シート名L8の後でR○○C○○と出てくる記述がよくわかりません。参照しているセルだろうというのはわかるのですが、どういう規則で書かれているかわかりません。よろしくお願いいたします。 Sub L82元表1() Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("L8").Range("AT15:AU17"), PlotBy:= _ xlRows ActiveChart.SeriesCollection(1).Values = "=('L8'!R17C46,'L8'!R19C46)" ActiveChart.SeriesCollection(1).Name = "='L8'!R16C44" ActiveChart.SeriesCollection(2).Values = "=('L8'!R17C47,'L8'!R19C47)" ActiveChart.SeriesCollection(2).Name = "='L8'!R18C44" ActiveChart.Location Where:=xlLocationAsObject, Name:="L8" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = Range("AR14").Text & Range("AS14").Text & "2元表" .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With End Sub

  • 複数のグラフを整列させて表示する方法

    現在、複数のグラフを作成するマクロを作っています(ちなみに、今日はじめてマクロを用いたグラフ作成に取り組みました)。 それぞれの行に13個のデータが入っていて(平均値と標準偏差がそれぞれ入っている)、それを用いて行ごとにグラフを作成します。 データが格納されている行はだいたい300個くらいなのですが、今のままだと300のグラフがすべて重ねられた状態で出てきます。 これを整列した状態で表示させたいのですが、どのようにすればよいのでしょうか? あと、今回はほとんど「マクロの記録」で作ったので、なんかソースが汚ないのでもう少し綺麗にならないでしょうか? 下にソースをのせておきます。よろしくお願いします。 Sub Macro6() ' ' Macro6 Macro ' ' Dim x As Long Cells(1, 1).Select x = Range(Selection, Selection.End(xlDown)).Rows.Count For i = 2 To x Range(Cells(i, 2), Cells(i, 14)).Select 'これがないと棒どうしが密着したグラフになる。 ActiveSheet.Shapes.AddChart.Select 'データの範囲を指定 ActiveChart.SetSourceData Source:=Range(Cells(i, 2), Cells(i, 14)) 'エラーバーをつける ActiveChart.ChartType = xlColumnClustered ActiveChart.SeriesCollection(1).HasErrorBars = True ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:=xlErrorBarIncludeBoth, Type:=xlErrorBarTypeCustom, Amount:=Range(Cells(i, 15), Cells(i, 27)), MinusValues:=Range(Cells(i, 15), Cells(i, 27)) 'Legendを消す ActiveChart.Legend.Select Selection.Delete 'タイトルや軸ラベルの名前を変更する ActiveChart.SetElement (msoElementChartTitleAboveChart) ActiveChart.ChartTitle.Text = Cells(i, 1) ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) ActiveChart.Axes(xlCategory, xlPrimary).axistitle.Text = "Class" ActiveChart.Axes(xlCategory, xlPrimary).axistitle.Font.Size = 14 ActiveChart.SetElement (msoElementPrimaryValueAxisTitleRotated) ActiveChart.Axes(xlValue, xlPrimary).axistitle.Text = "Intensity" ActiveChart.Axes(xlValue, xlPrimary).axistitle.Font.Size = 14 Next i End Sub

  • Excelでのグラフ作成用マクロについて

    Excelで、グラフ作成をするマクロを作りました。 sheet1のBC列選択→sheet2に出力→プロットエリア拡大まではうまくいったのですが、肝心の「図の位置調整・サイズ調整」が出来ませんでした。 中身を見たところ、「グラフ12」とかいう名前が勝手についていたらしく、何回やってもその名前を変更することが出来ませんでした。 参照する列を変更してグラフを作成しようとすると、次のグラフが「グラフ13」となってしまい、図の位置調整のところでエラーになります。 マクロは次のようなものなのですが、どうすれば「グラフ12」ではなく、「先ほど作ったばかりのグラフ」を参照してくれるのでしょうか? グラフ12という部分に任意の名前さえつけられれば、何とかなりそうなのですが・・・ グラフ12というものは、「グラフウインドウ」で見られるもののようです。 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With ActiveSheet.Shapes("グラフ 12").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 12").IncrementTop -105.75 ActiveSheet.Shapes("グラフ 12").ScaleWidth 1.48, msoFalse, msoScaleFromTopLeft ActiveSheet.Shapes("グラフ 12").ScaleHeight 1.21, msoFalse, msoScaleFromTopLeft ActiveChart.Axes(xlCategory).Select ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.PlotArea.Select Selection.Top = 1 Selection.Width = 526 Selection.Height = 242 End Sub

  • エクセルグラフの軸ラベルを一括変換出来なくて困っています。

    お世話になります。 初めて投稿いたします。 VBA初心者です。エクセルグラフの軸ラベルを一括変換したいのですが、分からなくて困っています。 過去ログ、個人HPなどを参考にして、一つのグラフを選択、下記マクロを実行すれば、一つのグラフのみなら軸ラベルを変更する事が出来たのですが、ワークシート内の複数の埋め込みグラフを一発でラベル変更する場合のマクロが作成できません。 当方会社員、データをまとめる為、今回100ヶほどのグラフを一括変換したいため、どうしてもマクロ処理したいと考えています。 For Each・・・Next でループさせたいのですが、何分初心者勉強中の為、エラー多発、何方かお分かりの方、お助け下さい。 Sub 軸ラベル一括変換() With ActiveChart With .Axes(xlCategory, xlPrimary) .HasTitle = True .AxisTitle.Text = "X" End With With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Text = "y" End With End With End Sub

  • 【Excel】マクロでグラフ系列に不明なデータが追加されてしまう問題

    はじめまして。 数日ほど色々な文献を調べたのですが、どうしても解決法が見つからなかったので質問させてください。 利用環境:Windows XP SP2 使用ソフト:Excel 2003 SP3 【問題】 マクロで自動的にデータを取り込み、複数のグラフを作成すると 2ワークシートごとに不明な系列データが追加されてしまう。 【具体的な症状】 Excelファイル(.xls)は1つのみです。 そこに1つのワークシートがあります。 例:RH001 そして、そのワークシートには以下の範囲に12個のデータが載っています。 AB12:AB112、AC:12:AC112、AD:12:AD112、AE12:AE112(28~31列) AJ12:AJ112、AK:12:AK112、AL:12:AL112、AM12:AM112(36~39列) AR12:AR112、AS:12:AS112、AT:12:AT112、AU12:AU112(44~47列) X軸は何も使用していません。 このデータをマクロを利用してグラフ化する際に ループで3つのワークシートを作り、4つのデータ系列を追加しています。 しかし、ワークシートの偶数番目(今回はワークシート2番)になると なぜか、ループとは関係の無いデータ系列が存在しています。 今回は、通常4つのところを9つのデータ系列にになってしまいます。 どうも調べてみると、余分なデータ系列は 「通常のデータ系列の数+1」だけ追加されるようです。 自分なりにデータをいじったり、ネットの文献を色々と調べてみたのですが、 数日経った今も全く解決出来ておりません。 どなたか解決方法をご教授ください。 よろしくお願いします。 ---------------------------------------------------------------- Sub test() 'ループで参照するワークシートを設定 strNameWorkSheet = "RH001" 'AB~AE、AJ~AM/AR~AUのデータをワークシートに分けるためのループ For q = 1 To 3 'グラフの作成 Charts.Add ActiveChart.ChartType = xlLineMarkers 'AB/AC/AD/AE、AJ/AK/AL/AM、AR/AS/AT/AUごとに新しいデータ系列を作るためのループ For m = 1 To 4 '新しい系列を追加 ActiveChart.SeriesCollection.NewSeries 'ループ時に列を横にずらしていく。qで8列ずらし、mで1列ずらす ActiveChart.SeriesCollection(m).Values = _ Sheets(strNameWorkSheet).Range(Sheets(strNameWorkSheet).Cells(12, 8 * q + 19 + m), _ Sheets(strNameWorkSheet).Cells(112, 8 * q + 19 + m)) Next m 'グラフのワークシート名を設定 strGraphName = strNameWorkSheet & q ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=strGraphName With ActiveChart .HasTitle = True .ChartTitle.Text = strGraphName .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "スラスト方向変位(mm)" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "各方向磁気力(N)" End With Next q End Sub

専門家に質問してみよう