Excel 2007のVBAでグラフの系列を操作する方法

このQ&Aのポイント
  • Excel 2007のVBAを使用して、グラフの系列を操作する方法について教えてください。
  • 特定のチャートには4つの系列があり、それぞれの名前は系列(1)、系列(2)、系列(3)、系列(4)です。これを系列(1)、系列(4)、系列(2)、系列(3)の順番に並び替えるにはどのような記述を使用すればよいでしょうか。
  • 上記のVBAコードでは、オブジェクトがMoveメソッドをサポートしていないため、系列の並び替えができません。適切な記述方法を教えてください。
回答を見る
  • ベストアンサー

Excel 2007 <VBAでグラフの操作(Seriescollec

Excel 2007 <VBAでグラフの操作(Seriescollectionの移動> あるチャートに系列が4つあります。 それぞれの名前を順に系列(1)、系列(2)、系列(3)、系列(4)とします。 これを系列(1)、系列(4)、系列(2)、系列(3)としたいのですが、 以下の記述では無理(オブジェクトはこのメソッドをサポートしていないとのこと)でした。 どのような記述になるでしょうか。 ご教示方よろしくお願いします。 Sub Temp6()   Dim myChart As Chart   For Each myChart In Charts     myChart.SeriesCollection(4).Move after:=myChart.SeriesCollection(1)   Next End Sub

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

myChart.SeriesCollection(4).PlotOrder = 2 です。PlotOrderプロパティで設定します。 2007はマクロ記録できないから厄介ですね。 ヘルプから ・Excel 2007 開発者用リファレンス  └リファレンス   └Series オブジェクト    └プロパティ ...という感じで下っていくと系列のプロパティ一覧やメソッド一覧が見れます。 この辺りを眺めてみると、処理コードのアタリがつくかもしれません。

t000506g
質問者

お礼

ご回答ありがとうございます。 そうなんです、グラフ操作をマクロ記録しても「グラフ1をアクティベイト」くらいしか記録されず・・・・困ってます。 ヘルプのアドバイス、ありがとうございます。 参考にしたいと思います。

関連するQ&A

  • Excel 2007 <VBAでグラフの操作>

    Excel 2007 <VBAでグラフの操作> 現在すでにあるグラフを修正しています。 下記マクロでは「各グラフに系列が2つあり、その1つ目を削除して残る1つのデータ範囲(X軸の値)を再設定する」という内容です。 下記マクロではFor構文冒頭のSet~の行で、 「実行時エラー '1004': 'Cells'メソッドは失敗しました:'_Global'オブジェクト」 とのエラーが出ます。 このエラーについて検索してみたのですが、これといったものが見つからなかったので、このマクロでおかしなところがあれば直接指摘していただけないでしょうか。 よろしくお願いします。 Private Sub Test_Arrange()   Dim MyRng As Range   Dim R As Integer   Dim n As Integer   Dim i As Integer   n = 10   R = Sheets("Sheet1").Range("A1").End(xlDown).Row   For i = 1 To n     Set MyRng = Sheets("Sheet1").Range(Cells(2, 2 * n + 3), Cells(R, 2 * n + 3))     Charts(i).SeriesCollection(1).Delete     Charts(i).SeriesCollection(1).XValues = MyRng   Next i End Sub

  • エクセルグラフ2003と2007の違いについて

    エクセル2003で下記のVBAの構文を作成しました。 入力画面シートで入力し、グラフに色付けを反映させたものを 印刷画面のグラフに同じものを反映させているのですが エクセル2003ではうまくいっていたのですが エクセル2007になると構文中の 【Sheets("印刷画面").ChartObjects("グラフ 2").Chart.SeriesCollection(1).Points(i).Interior.ColorIndex = nColor】の部分で 実行時エラー'-2147467259(80004005) ColorIndexメソッドは失敗しました;'Interior'オブジェクト とでてきて使用できなくなりました。 どなたかエクセル2007で使用できるようにする方法を教えてください。 作成した構文は以下のものです。 Sub Sam1() Dim nColor As Variant Dim i As Long i = 1 If Sheets("入力画面").Cells(i, "M") = 1 Then nColor = 5 Sheets("入力画面").ChartObjects("グラフ 8").Chart.SeriesCollection(1).Points(i).Interior.ColorIndex = nColor Sheets("印刷画面").ChartObjects("グラフ 2").Chart.SeriesCollection(1).Points(i).Interior.ColorIndex = nColor End Sub

  • EXCEL2007 VBA グラフサイズ修正バグ?

    下記のようなグラフのサイズ調整するVBAプログラムをEXCEL2007で動かしました。 VBEで実行すると正常に動作します。 シートに図形を設置し、その図形にマクロを登録して実行すると、 グラフが3画面位広がってしまいます。 図形にマクロ登録してグラフ調整を正常に動かすことはできないのでしょうか? ----------------------------------------------------- 'グラフの再調整を行うサブルーチン Sub chartRerange()  Dim wb As Workbook  Dim strWbName As String  Dim myRng1, myRng2, myRng3 As Range  Dim myChart As Shape  Dim rngTarget As Range      '開いているすべてのワークブックを処理対象とする  For Each wb In Workbooks   strWbName = wb.Name      '「月度」が含まれているならば処理   If InStr(strWbName, "月度") <> 0 Then    Set myRng1 = wb.Worksheets(2)    Set myRng2 = wb.Worksheets(3)        For Each myChart In myRng1.Shapes     'グラフならば     If (TypeOf myChart.OLEFormat.Object Is ChartObject) Then            Select Case myChart.Name       Case "chart1"        Set rngTarget = Range("B24:AG42")      End Select             'グラフを指定したエリアに配置する      With myChart        .Top = rngTarget.Top        .Left = rngTarget.Left        .Width = rngTarget.Width        .Height = rngTarget.Height      End With     End If    Next   End If  Next      MsgBox "処理完了"      Set wb = Nothing   Set myRng1 = Nothing   Set myRng2 = Nothing   Set myChart = Nothing   Set rngTarget = Nothing End Sub

  • [VBA Excel] 2系列の散布図を書いてみるとおかしくなります・・・

    Excel 2007とVBAで数値解析をしています。計算結果のグラフを表示するための準備段階として、次のようなプログラムを組んで、2系列の散布図を書いて見ました。 Option Explicit Sub makechart()   Dim chart1 As ChartObject, wsh As Worksheet   Set wsh = Sheet1   Set chart1 = wsh.ChartObjects.Add( _   10, 20, 250, 200)   With chart1.Chart    .ChartType = xlLineStacked    .SeriesCollection.NewSeries    .SeriesCollection(1).XValues = _     wsh.Range("A1:A5")    .SeriesCollection(1).Values = _     wsh.Range("B1:B5")   End With   With chart1.Chart    .SeriesCollection.NewSeries    .SeriesCollection(2).XValues = _     wsh.Range("A1:A5")    .SeriesCollection(2).Values = _     wsh.Range("C1:C5")   End With End Sub --sheet1--   A B C ----------- 1| 1 2 3 2| 2 3 4 3| 3 4 5 4| 4 5 6 5| 5 6 7 系列1のグラフはB列 対 A列という意図通りのものになったのですが、系列2のグラフは、Y軸の値が、C列の値にB列の値を足したもの (1,2+3)、(2,3+4) ・・・ になってしまいました。系列2のグラフも純粋にC列 対 A列したいのですが、そのためにはどうすれば良いでしょうか。ご教授ください。

  • VBA:2つの異なるシートからグラフを作成する

    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 ちなみに、各セルにはちゃんとデータが入っております。 よろしくお願いいたします。

  • エクセルVBAの質問

    VBAでわからないことがあります。 まず下記のプログラムをご覧下さい。 グラフを作成して、そのグラフにタイトルをつけるというものですが、グラフを削除してまた新たに作成すると "graph1"ではなくなりますよね? グラフの番号がどのようになっても利用できるプログラムを作成したいのですが、どのようにすればよいのでしょうか? ************************** Sub MakeChart() Dim mySouce As Range Set mySouce = Range("B2").CurrentRegion Charts.Add ActiveChart.SetSourceData _ Source:=mySouce,PlotBy:=xlColumns Charts("Graph1").Activate with activechart .HasTitle=True .ChartTitle.Text = "4月度売上高" End Sub ************************* 私が考えたのは Charts("Graph1").Activate ⇒chart("graph" & charts.count) だと思うのですが、うまくいきませんでした。 ご存知の方がいましたら、教えていただけないでしょうか。

  • Excel VBAのグラフ化自動マクロがうまくできません。

    Sub 自動グラフ作成() For i = 5 To 32 Step 3 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=distance!R18C1:R1009C1" ActiveChart.SeriesCollection(1).Values = "=distance!R18C" & (i + 2) & ":R1009C" & (i + 2) Next End Sub 上記のように表の中の決められたセルからデータを取り出して自動的にグラフを作成してくれるマクロを作成したのですが、奇数個めのグラフは正常に生成されるのですが、偶数個めのグラフになぜか x= y=distance!$M$18:$M$1009 x= y={1} みたいな必要なグラフ以外に上記の2つのグラフを混じってしまいます。これってどこがおかしいのでしょうか? どなたか助けて下さい。 お願いいたします。

  • [VBA]グラフを作りたいです!(^-^v

    教えて下さい。 テキストファイルの内容を元に自動的グラフを作りたいです。 【C:\Temp\data.csv】の中身 ----------------------------------- 1回目,10.50% 2回目,30.45% 3回目,70.45% ----------------------------------- 横軸には「n回目」の文字列を、縦軸には「n%」数値を入れたいです。 なんとか静的にグラフを作ることは出来ましたが、これを自動化したいと思っています。 【サンプルvba】 ----------------------------------- Private Const LOGFILE = "C:\Temp\data.csv" Private Sub CommandButton1_Click() ' グラフオブジェクト作成(位置,サイズ) With Sheet1.ChartObjects.Add(10, 50, 400, 150).Chart .ChartType = xlLine ' 折れ線グラフ .Axes(xlValue).MaximumScale = 100 ' 縦軸最大値 .Axes(xlValue).MinimumScale = 0 ' 縦軸最小値 ' グラフデータ内容 With .SeriesCollection.NewSeries ' グラフ名 .Name = "テスト" ' 縦軸 (ここに%数値を入れたい) .Values = "={10.50,30.45,70.45}" ' 横軸 (ここに回数を入れたい) .XValues = "={""1回目"",""2回目"",""3回目""}" End With End With End Sub ----------------------------------- テキストファイルの内容は一定間隔で更新されるため自動的に取り込みたいです。 すいませんがよろしくおねがいします、、。(T▽T)ノ

  • vbaのイベントについて質問

    vbaでマクロを組んでおります。 mouseupイベント、GetChartElementをもちいて散布図の中のグラフ要素の値を取得したいのですが、 これらのコマンドはグラフシートにしか適用できないでしょうか?グラフシートではうまくいくのですが埋め込みグラフに対して行うとうまくいきません。分かる方いらっしゃいましたら、お願いいたします。 クラスモジュールClass1にて↓ Public WithEvents myChart As Chart Private Sub myChart_MouseUp _ (ByVal Button As Long, _ ByVal Shift As Long, _ ByVal x As Long, _ ByVal y As Long) Dim ElemID As Long, Arg1 As Long, Arg2 As Long myChart.GetChartElement x, y, ElemID, Arg1, Arg2 Select Case ElemID Case xlSeries MsgBox ("データ系列") '⇒データ系列と認識されればメッセージボックスがでるはず Case Else MsgBox ("その他") End Select End Sub 標準モジュールに入力↓ Dim myClass As New Class1 Sub InitializeChart() Set myClass.myChart = ActiveChart End Sub

  • excel2007でグラフの書式設定をするマクロ

    excel2003で作成したマクロで、excel2003上では動作するのですが、excel2007ではエラーになります。 調べた限りでは、excel2007でVBAの仕様が変わったということも無いようですが、新しくexcel2007でマクロを記録してみてもエラーになり、困っています。 マクロの内容は、グラフの系列にラベルの書式設定をするというものです。 エラー内容「'HasDataLabels' メソッドは失敗しました: 'Series'オブジェクト」 ---------------------------- Sub LabelSet() Dim col_srs As SeriesCollection Dim obj_srs As Series          Sheets("Sheet1").ChartObjects(1).Activate     Set col_srs = ActiveChart.SeriesCollection     'データ系列ごとに個々の系列名を表示     For Each obj_srs In col_srs       With obj_srs         .HasDataLabels = True         .DataLabels.ShowSeriesName = True         .DataLabels.ShowValue = True         .DataLabels.Separator = Chr(10)       End With     Next End Sub ----------------------------

専門家に質問してみよう