• 締切済み

excel2010 マクロでの散布図作成

excel2010で、ログを整理して複数のグラフを自動作成するマクロを作成しています 散布図の作成手順を記録した後、変数を当てなおしマクロを走らせると記録時と異なる挙動を示し、記録時にはひとつしか作成しなかった系列が25個くらい作成されました 下記マクロでおかしなところがあればご指摘ください ------------------------------ sheetname2 = ActiveSheet.Name ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterLinesNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='" & sheetname2 & "'!$E$1" ActiveChart.SeriesCollection(1).XValues = "='" & sheetname2 & "'!$A$2:$A$" & y3 ActiveChart.SeriesCollection(1).Values = "='" & sheetname2 & "'!$E$2:$E$" & y3 ------------------------------- 作りたいグラフ:散布図 系列 「アクティブシート」のセルE1 x軸  「アクティブシート」のセルA2~A「y3」 y軸  「アクティブシート」のセルE2~E「y3」 なお、シート名を固定すると色々と問題があるため、変数としてあります また、変数y3は別途取得してありますが、省略いたします

みんなの回答

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

(例1)系列1のみ残しあとの系列は削除する Dim i As Integer ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterLinesNoMarkers If ActiveChart.SeriesCollection.count > 1 Then For i = ActiveChart.SeriesCollection.count To 2 Step -1 ActiveChart.SeriesCollection(i).Delete Next End If ActiveChart.SeriesCollection(1).Name = "='" & sheetname2 & "'!$E$1" ActiveChart.SeriesCollection(1).XValues = "='" & sheetname2 & "'!$A$2:$A$" & y3 ActiveChart.SeriesCollection(1).values = "='" & sheetname2 & "'!$E$2:$E$" & y3 (例2)SetSourceDataでやってみる Dim drng As Range Set drng = Union(Range("A2:A" & y3), Range("E2:E" & y3)) With ActiveSheet.Shapes.AddChart.Chart .ChartType = xlXYScatterLinesNoMarkers .SetSourceData Source:=drng, PlotBy:=xlColumns .SeriesCollection(1).Name = "='" & sheetname2 & "'!$E$1" End With (例3)ChartObjectをAddしてみる Dim crng As Range Dim nrng As Range Dim xrng As Range With ActiveSheet Set crng = .Range("H1:N13") Set nrng = .Range("E1") Set xrng = .Range("A2", .Range("A" & .Rows.count).End(xlUp)) With .ChartObjects.Add(crng.Left, crng.Top, crng.Width, crng.Height) .Chart.ChartType = xlXYScatterLinesNoMarkers With .Chart.SeriesCollection.NewSeries .Name = "='" & ActiveSheet.Name & "'!" & nrng.Address .XValues = xrng .values = xrng.offset(, 4) End With End With End With

関連するQ&A

  • Excel VBAの散布図について

    Excel VBAで散布図を作ろうと考えています。 元のデータは添付した画像のものです。 左端にXの値があって、それ以降7列ごとに8枚の散布図を作成しようと考えております。 そこで、kを1~8まで動かし8種類の散布図を作成しようと考えているのですが、このマクロではk=1だけプログラムを回しただけで、一枚のグラフにすべての系列が載ってしまいます。 kを動かさずに、Cellの位置を指定して回した際にはうまくいったのですが、kを動かすようにしたところうまくいきません。 散布図を作る際に系列の数(私の場合7種類)を指定するにはどうしたらよいでしょうか。 どなたかご教授ください。 For k = 1 To 8 ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SeriesCollection(1).Name = Sheets("Voltammogram").Cells(10, -5 + 7 * k) ActiveChart.SeriesCollection(1).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(1).Values = Sheets("Voltammogram").Range(Cells(12, -5 + 7 * k), Cells(250, -5 + 7 * k)) ActiveChart.SeriesCollection(2).Name = Sheets("Voltammogram").Cells(10, -4 + 7 * k) ActiveChart.SeriesCollection(2).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(2).Values = Sheets("Voltammogram").Range(Cells(12, -4 + 7 * k), Cells(250, -4 + 7 * k)) 以降7列まで続きます。

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

    エクセルに備わっているマクロの自動記録機能を使って、散布図のグラフを作成するマクロを作っています。 シートの名前が変わるとマクロが正常に働かない問題は、 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に関しては初心者です。 プログラムの知識も殆どありません。 どうか、ご教授をお願い致します。

  • EXCEL2007 <VBAで散布図の系列の追加>

    EXCEL2007 <VBAで散布図の系列の追加> 標記の通り、VBAで散布図に新たに系列を追加したいのです。 たとえば現在、系列1があるとします。 そこで、横軸がA1:A10、縦軸がB1:B10のデータを追加するとします。     ActiveChart.SeriesCollection.Add Range("A1:B10") しかし、このマクロだと縦軸がA1:A10の系列2と縦軸がB1:B10の系列3ができてしまします。 そこで、ためしに     ActiveChart.SeriesCollection.Add Range("A1")   '仮に作る     With ActiveChart.SeriesCollection(2)       .XValues = Range("A1:A10")       .Values = Range("B1:B10")     End With とすると、「実行時エラー'1004'; アプリケーション定義またはオブジェクト定義のエラーです。」となります。 いろいろ検索したのですが、これと言ったのがみつかりません。 意図するマクロはどのようなものになるのでしょうか。 ご教示お願いします。

  • 散布図の元データを、変数で書けません。。。

    既に作ってある複数の散布図について、xの値とyの値を変数で書き直すマクロをどうやって作ったらよいものか、困り果てています。 既存のサンプルの元データは、マクロなど使っておらず、 =Sheet3!A5:A15 といった、ありふれた形式なのですが、このA5、A15を変数で可変にしたいのです。 置き換える変数は、本プログラムの中で行番号として、cells(i%,3)と いうふうに使ってきてました。 ActiveChart.SeriesCollection(1).XValues = Range(Cells(i%, 1), Cells(i%+10, 1)) (この前の行でi% = 5としている) としてみても、「'cells'メソッドは失敗しました」というエラーが返ってきてしまいます。 ちなみに使用エクセルは2003です。 よろしくお願い致します。。

  • Excel2000でのVBAによる散布図の値の表示について

    Excel2000の散布図の機能を使って、 時系列データを折れ線で表示させています。 あるデータの値だけをラベルとして表示させたいのですが、うまくいきません。 例えば、tとYのデータ t,Y 1,70 2,40 3,60 4,30 5,100 6,10 7,30 8,80 9,20 10,90 があるとして散布図で時系列表示させてYの値が50以上のポイントだけそのYの値をラベルとして表示させたいのです。 過去の質問を参考にして以下のようなVBAのプログラムを作ったのですがうまくいきません。 Sub Label() Dim i As Integer ActiveSheet.ChartObjects(1).Activate ActiveChart.ApplyDataLabels For i = 1 To Range("B1", Range("B1").End(xlDown)).Cells.Count If ActiveSheet.Cells(i, 2).Value > 50 Then ActiveChart.SeriesCollection(1).Points(i).DataLabel.Text = ActiveSheet.Cells(i, 2).Value End If Next i End Sub 一つ一つのポイントの値をグラフ上で消去したり入力するのは非常に大変なので、うまい方法がないか考えているところです。 今、Excel2000を使っています。 どなたか分かる方がおられましたら教えてください。 よろしくお願い致します。

  • excelのマクロによるグラフの指定方法

    マクロがどのように記録されるかを見ながら、VBAのスクリプトの書き方を学んでいる初心者です。 Sub Macro1() ' ' Macro1 Macro , ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveWindow.ScrollColumn = 1 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$B$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$B$4:$B$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$C$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$C$4:$C$18" ActiveChart.ChartType = xlLine ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$D$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$D$4:$D$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$E$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$E$4:$E$18" ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(3).Name = "='平均化'!$F$1" ActiveChart.SeriesCollection(3).Values = "='平均化'!$F$4:$F$18" End Sub 以上のマクロを作成し、実行したのですが、”指定した名前のアイテムが見つかりませんでした”と出て、上手く実行されませんでした。 操作対象のオブジェクトを行き来する方法を知りたいのですが、オブジェクトを作成するたびに ActiveSheet.ChartObjects("グラフ 1").Activate のダブルクオーテーション内に当たる値が自動的に割り振られるため、この部分でエラーになることは分かりました。 つまりこの値をこちらから指定出来れば、望んだ動作をさせられるのではと考えているのですが、 どなたかご教示お願いできませんでしょうか。

  • グラフマクロで系列を変数にする方法を教えてください

    エクセルのグラフマクロについて質問します。 系列のxの値(Yの値も)の設定で、 グラフ化したいワークシートと範囲を変数にすることはできますか? 目的は、複数あるシートの複数のセルをグラフ化したい、というものです。 変数にてシート名と範囲を指定したいです。 ↓のようなプログラムを作成してみましたが、どうもうまく動きません。 12行目で止まってしまいます。 13行目はでたらめですが、範囲も変数bにできないかなぁと、勝手にイメージで作ってみました。 Sub () n = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To n Sheets("SHEET1").Select Range("A" & i).Select a = ActiveCell.Value Sheets(a).Select Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(a).Range("V22") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=sheets(a)!R2C4:R5C4" ActiveChart.SeriesCollection(1).Values = "=sheets(a)!range(b)" ActiveChart.Location Where:=xlLocationAsObject, Name:=Sheets(a) Next i End Sub 当方、マクロかじりたての初心者です。 どなたか、よろしくおねがいします!

  • Excelマクロでグラフ作成

    現在、Excelのマクロでグラフを作成しようとしていますが、データ範囲の指定で悩んでいます。 マクロはド素人で右も左もわからない状態から、なんとなく雰囲気だけわかってきたような感じです。 とあるHPをそのまま貼り付け用シートにコピペして、そこからデータ抽出用シートにデータを抽出して蓄積していく形にしています。 品名が複数あるので、オートフィルタを使用してソートするために始点をどう決めるのかがわからないのと、データがどんどん蓄積していくために終点もどう決めたらいいのかわかりません。 「データ抽出用シート」のデータ形式は、 18行目にA:品目 B:最低値 C:平均値 D:最高値 G:日付 19行以降にデータ という形になっています。 とりあえず、通常のマクロを記録する方法でマクロの骨組みだけ作ってから細部をいじろうとしております。 データの範囲を指定する部分だけコピペしますので、ここをどういじったらいいのかご教授願います。 とある品目を指定してオートフィルタをかけた後に、グラフ作成手順のマクロを記録したら、こんな感じになりました。 Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("データ抽出用シート").Range("L17") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(1).Values = "=データ抽出用シート!R19C2:R366C2" ActiveChart.SeriesCollection(1).Name = "=データ抽出用シート!R18C2" ActiveChart.SeriesCollection(2).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(2).Values = "=データ抽出用シート!R19C3:R366C3" ActiveChart.SeriesCollection(2).Name = "=データ抽出用シート!R18C3" ActiveChart.SeriesCollection(3).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(3).Values = "=データ抽出用シート!R19C4:R366C4" ActiveChart.SeriesCollection(3).Name = "=データ抽出用シート!R18C4" ActiveChart.Location Where:=xlLocationAsObject, Name:="データ抽出用シート" 宜しくお願いします。

  • 散布図参照先設定時にエラーがでます(>_<)

    こんにちは 最近Excel2000でVBAを始めたばかりです。 複数の系列を持つ散布図で、それぞれの系列の 参照先を設定したいのですが、下記のコードで エラーがでてしまいます、 ActiveSheet.ChartObjects(1).Activate ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(2).XValues = "=データ1!R4C5:R51C5" ActiveChart.SeriesCollection(2).Values= "=データ1!R4C4:R51C4" ←この最後の行でエラー 同一の値をVBAではなく、Excelの 「元のデータ」の「系列」で設定すると、 問題なく設定ができます。 色々試した結果、下記の二つの条件を満たした時に エラーがでるような気がします。 条件1  1以外のデータ系列の設定をしようとしている時  SeriesCollection(1)では問題ありません 条件2  Xの値、Yの値のどちらかに数値ではなく  既にセルの参照先が設定されているデータ系列に  設定しようとしている時。 参照先が「={1}」や「={2}」などと数値のみが  入力されている場合は問題ありません どなたか教えてください。 よろしくお願いしますm(_ _)m

  • Excel VBAで、散布図のデータ範囲が正しく指定されない

    VBA初心者です。 アクティブシート上に、散布図を作成したいのですが・・・ Dim mySheet, mySheetName Set mySheet = ActiveSheet mySheetName = ActiveSheet.Name Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=mySheet.Range("A1:C10") ActiveChart.Location Where:=xlLocationAsObject, Name:=mySheetName これを実行させた時アクティブなセルに数字が存在すると、データ範囲が「A1:C10」ではなく、アクティブなセルになってしまいます。 原因を教えていただけないでしょうか。よろしくお願いします。

専門家に質問してみよう