マンガでよめる痔のこと・薬のこと

下記の変更をVBAで行いたいのですがわかりません。
系列は2つです。

データ系列の中のどれかひとつをダブルクリックします。
あるいは、右クリック-[データ系列の書式設定(O)...]や、データ系列を選択して[書式(O)]-[選択したデータ系列(E)...]や、データ系列を選択して[Ctrl] + [1]キー でも構いません。[データ系列の書式設定]ダイアログボックスを表示させます。

[系列の順序]タブを選択します。

順序を変更したいデータ系列を、[系列の順序(S)]から選択、[上へ移動(U)]や[下へ移動(D)]ボタンで順序を変更してください。

以上、よろしくお願いします。

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

A 回答 (1件)

こんにちは



たぶん、対話型で、以下のようなものになるように思います。
ただし、散布図はこの範疇ではありません。

'//
Sub ChartSeriesMoving()
 Dim objChrt As ChartObject
 Dim chSries As FullSeriesCollection
 Dim nums As Integer
 Dim i, j, nm As String
 
 Set objChrt = ActiveSheet.ChartObjects(1)
 Set chSries = objChrt.Chart.FullSeriesCollection
 nums = chSries.Count
START:
 i = Application.InputBox("系列の順番の数字を入れてください。(左/上から" & nums & "までです.)")
 If VarType(i) = vbBoolean Then Exit Sub
  If Val(nums) < i Then MsgBox "数字が系列の数より多いです。", vbExclamation: Exit Sub
  nm = chSries(i).Name
  chSries(i).Select
  j = Application.InputBox(nm & "を何番目に写しますか?左/上から(左/上から" & nums & "までです.)")
  If VarType(j) = vbBoolean Then Exit Sub
  chSries(i).PlotOrder = j
  Application.ScreenUpdating = True
  Application.Wait Now + TimeSerial(0, 0, 3)
  If MsgBox("続けますか(Y), 終了しますか(N)", vbYesNo) = vbYes Then
  GoTo START
  End If
End Sub

なお、私は、リクエストされたご要望の回答者層には含まれていません。
    • good
    • 0
この回答へのお礼

回答いただいたchSries(i).PlotOrder = jを参考に「.SeriesCollection(2).PlotOrder = 1」を見つけることができました。ありがとうございました。

お礼日時:2016/11/14 09:51

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

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

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

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

Qエクセルグラフの系列・凡例の表示順序について

《元データ》
A列:商品1の売上高
B列:商品2 〃    だとすると
 
    ↓

《グラフ》
系列・凡例とも、表示順は
『商品2、商品1』となってしまいますが、
これを逆順にする方法はありますか?

元データの列を入れ替えずに何とかならないでしょうか。よろしくお願いいたします。

Aベストアンサー

そのグラフは多分横棒グラフでしょう。
この場合は、このようになってしまうのですが、仕様なので修正しなければなりません。

グラフのY軸を選択して、右クリックで「軸の書式設定」→「目盛り」タブから下のチェックボックスの「軸を反転する」と「最大項目で・・・・」の両方にチェックを入れてください。系列凡例ともに逆になります。
もし、他のグラフ様式でしたら補足してください。

QEXCEL2007

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'; アプリケーション定義またはオブジェクト定義のエラーです。」となります。


いろいろ検索したのですが、これと言ったのがみつかりません。
意図するマクロはどのようなものになるのでしょうか。
ご教示お願いします。

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)
    ...続きを読む

Aベストアンサー

NewSeriesメソッドで系列が追加出来ます。

ActiveChartがグラフシートならセルは持っていません。
よって
.XValues = Range("A1:A10")
は成立しません。
元データがあるシート名を明記してください。

≪例1≫
With ActiveChart.SeriesCollection.NewSeries
  .XValues = Sheets("Sheet1").Range("A1:A10")
  .Values = Sheets("Sheet1").Range("B1:B10")
End With

≪例2≫
With Charts("Graph1").SeriesCollection.NewSeries
  .XValues = Sheets("Sheet1").Range("A1:A10")
  .Values = Sheets("Sheet1").Range("B1:B10")
End With

≪例3≫
With Charts(1).SeriesCollection.NewSeries
  .XValues = Sheets("Sheet1").Range("A1:A10")
  .Values = Sheets("Sheet1").Range("B1:B10")
End With

NewSeriesメソッドで系列が追加出来ます。

ActiveChartがグラフシートならセルは持っていません。
よって
.XValues = Range("A1:A10")
は成立しません。
元データがあるシート名を明記してください。

≪例1≫
With ActiveChart.SeriesCollection.NewSeries
  .XValues = Sheets("Sheet1").Range("A1:A10")
  .Values = Sheets("Sheet1").Range("B1:B10")
End With

≪例2≫
With Charts("Graph1").SeriesCollection.NewSeries
  .XValues = Sheets("Sheet1").Range("A1:A10")
  .Values = Sheets("Sheet1")....続きを読む

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

QVBA 実行時エラー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

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’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

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’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な...続きを読む

Qエクセル2013 VBA グラフのデータ系列変更

エクセル2013を使っています。マクロ初心者です。グラフも普段あまり扱いませんので不慣れです。よろしくお願いします。
マクロの記録を使ってグラフのデータ範囲を変更したら、下記コードが記録されました(○○○はシート名です)。

ActiveSheet.ChartObjects("グラフ 2").Activate
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.FullSeriesCollection(1).Values = "='○○○'!R189C37:R199C37"
ActiveChart.FullSeriesCollection(2).Values = "='バ○○○'!R189C38:R199C38"

この189と199に変数を下記のように入れました。

Dim r As Integer
r = Range("A1").End(xlDown).Row
Dim i As Integer
Dim s As Integer
s = r - 10
i = ActiveCell.Value
ActiveSheet.ChartObjects("グラフ 2").Activate
ActiveChart.Axes(xlValue).MajorGridlines.Select

ActiveChart.FullSeriesCollection(1).Values = "='○○○'!R" & s & "C37:R" & r & "C37"
ActiveChart.FullSeriesCollection(2).Values = "='○○○'!R" & s & "C38:R" & r & "C38"

これを実行すると、エラーコード400になっていまいます。
どうすればいいのでしょうか?

エクセル2013を使っています。マクロ初心者です。グラフも普段あまり扱いませんので不慣れです。よろしくお願いします。
マクロの記録を使ってグラフのデータ範囲を変更したら、下記コードが記録されました(○○○はシート名です)。

ActiveSheet.ChartObjects("グラフ 2").Activate
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.FullSeriesCollection(1).Values = "='○○○'!R189C37:R199C37"
ActiveChart.FullSeriesCollection(2).Values = "='バ○○○'!R189C38:R199C38"

この189と199に変数を下記...続きを読む

Aベストアンサー

>No.1 この回答へのお礼
ChartObjects("グラフ 2")は選択されていますか?
対象グラフと違うグラフが選択されたりはしていませんか?

他に下記でも試してください。
Worksheets("○○○")
ActiveChart.FullSeriesCollection(1).Values = .Range(.Cells(s, 37), .Cells(r, 37))
ActiveChart.FullSeriesCollection(2).Values = .Range(.Cells(s, 38), .Cells(r, 38))
End With

QExcelグラフで線の色はそのままで系列順序を変更

Excelのグラフで、各系列の色・線種などは自動で割り振っていますが、現在の各系列と色等の対応関係はそのままにし、系列の順序のみを変更することはできますか。
目的は、
1 系列名称と色等の対応関係は、複数のグラフで同一にしたい。
2 凡例での系列の並びを、グラフによって変更したい(右端区間でもっとも値の大きいのを最上に)
です。
例をあげれば、PC、テレビ、クーラーの3系列の、価格を縦軸に、年代(1990,1995,2000年)を横軸に表したグラフがアメリカ、中国、日本の3個あるとして、車は赤、テレビは青、PCは黄色と色を統一し、かつ、グラフによって凡例での表示順を(そのグラフでの2000年の価格の高い順に)変えたいのです。
実際には系列数・グラフ数が多く手作業では大変です。VBAなどを使って最初から簡単に実現する方法があれば、その方がありがたいのですが。

Aベストアンサー

Excelグラフで線の色はそのままで系列順序を変更
 →系列名称に応じて色・マーカー種をシート内の全グラフ間で統一

というVBAコードを作成してみました。ご参考まで。
もっと色々設定したければ、ご自分で研究して下さい。
Sub test()
Dim myGraphObj As ChartObject
Dim sh As Worksheet
Dim mySeries As Series
Dim myColor As Long

Set sh = Sheets(1)
For Each myGraphObj In sh.ChartObjects
For Each mySeries In myGraphObj.Chart.SeriesCollection
With mySeries
Select Case .Name
Case "A"
myColor = RGB(255, 0, 0)
.MarkerStyle = xlMarkerStyleSquare
Case "B"
myColor = RGB(0, 0, 255)
.MarkerStyle = xlMarkerStyleCircle
Case "C"
myColor = RGB(0, 255, 0)
.MarkerStyle = xlMarkerStyleDiamond
End Select
.MarkerSize = 10
.MarkerForegroundColor = myColor
.MarkerBackgroundColor = myColor
.Format.Line.ForeColor.RGB = myColor
End With
Next mySeries
Next myGraphObj
End Sub

Excelグラフで線の色はそのままで系列順序を変更
 →系列名称に応じて色・マーカー種をシート内の全グラフ間で統一

というVBAコードを作成してみました。ご参考まで。
もっと色々設定したければ、ご自分で研究して下さい。
Sub test()
Dim myGraphObj As ChartObject
Dim sh As Worksheet
Dim mySeries As Series
Dim myColor As Long

Set sh = Sheets(1)
For Each myGraphObj In sh.ChartObjects
For Each mySeries In myGraphObj.Chart.SeriesCollection
With mySeries
...続きを読む

QExcelマクロ・グラフエリア・プロットエリアのサイズを変更及び綺麗に並べる

何方か、宜しくお願いします。

質問1
ワークシート上の複数のグラフを選択した状態でマクロを実効して
全てのグラフエリア・プロットエリアを同じサイズに変更するマクロを
教えて下さい。
(下記のコードでは、一つのグラフのプロットエリアのみ変更になります。)

Sub グラフサイズ()
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select 'プロットエリア
With Selection
.Top = 17
.Left = 27
.Width = 463
.Height = 330
End With
Range("A3").Select
End Sub
(参考:http://oshiete.nikkeibp.co.jp/qa780484.html)

質問2
質問1で修正したグラフを3列、行数は任意でワークシート上に綺麗に並べたい
のですが、どのようなコードでしょうか。?(グラフとグラフの間は5ポイント位
隙間を入れたいと思います。グラフ数は20~40位、Excel2000)

何方か、宜しくお願いします。

質問1
ワークシート上の複数のグラフを選択した状態でマクロを実効して
全てのグラフエリア・プロットエリアを同じサイズに変更するマクロを
教えて下さい。
(下記のコードでは、一つのグラフのプロットエリアのみ変更になります。)

Sub グラフサイズ()
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select 'プロットエリア
With Selection
.Top = 17
.Left = 27
.W...続きを読む

Aベストアンサー

こんばんは。Wendy02です。

>プロットエリアサイズは固定出来ないのでしょうか?、私が探した所無いようでしたが?Excelの仕様かな?

ある程度は可能ですが、On Error トラップが必要ですね。つまり、そのまま実行してしまうと、物理的?な数値に合わないと、実行時エラーが発生してしまうのです。だいたい、プロットエリアの大きさは、グラフエリアの90%ぐらいだったかな? だから、理論的に、一旦、プロットエリアの大きさを取って、グラフエリアを変更してしまえば可能だと思うのです。その後で、並びの位置整理すればよいわけですね。でも、そうすると、今度は、グラフ全体の大きさがマチマチになる可能性があるわけです。

それで、最初の私のコードのように、グラフエリアは、余計なものだとして、私は、消してしまったのです。結構、見栄えが良いなって、自負したのですが……。^^;

Qエクセル 0や空白のセルをグラフに反映させない方法

以下の点でどなたかお教えください。

H18.1~H20.12までの毎月の売上高を表に記載し、その表を元にグラフを作成しています。グラフに反映させる表の範囲はH18.1~H20.12の全てです。
そのためまだ経過していない期間のセルが空白になり、そこがグラフに反映され見づらくなります。
データを入力する都度グラフの範囲を変更すればいいのですが、うまく算式や設定等で空白や0円となっているセルをグラフに反映させない方法はありますか?

お手数ですが、よろしくお願いいたします。

Aベストアンサー

売上高のセルは数式で求められているのですよね?
それなら
=IF(現在の数式=0,NA(),現在の数式)
としてみてください。
つまり、0の場合はN/Aエラーにしてしまうんです。N/Aエラーはグラフに反映されません。

QVBAでグラフの凡例をまびきたいのですが

エクセル2003のVBAで、グラフの凡例をまびきたいのですがやり方がわかりません。
例えば
系列1:凡例表示
系列2:凡例非表示
系列3:凡例表示
系列4:凡例非表示
といった具合です。

以下のような雰囲気のコードはないでしょうか。
For i=1 to 10
Workbooks("matome.xls").Charts("Graph_PinPex").SeriesCollection(i * 2).HasLegend = False
Next i

Aベストアンサー

Deleteしては駄目ですか?
Sub test1()
Dim i As Integer

With Workbooks("matome.xls").Charts("Graph_PinPex")
For i = .SeriesCollection.Count To 1 Step -2
.Legend.LegendEntries(i).Delete
Next i
End With
End Sub

あるいは
Sub test2()
Dim i As Integer

With Workbooks("matome.xls").Charts("Graph_PinPex")
For i = .SeriesCollection.Count To 1 Step -1
If i Mod 2 = 0 Then
.Legend.LegendEntries(i).Delete
End If
Next i
End With
End Sub

Deleteしては駄目ですか?
Sub test1()
Dim i As Integer

With Workbooks("matome.xls").Charts("Graph_PinPex")
For i = .SeriesCollection.Count To 1 Step -2
.Legend.LegendEntries(i).Delete
Next i
End With
End Sub

あるいは
Sub test2()
Dim i As Integer

With Workbooks("matome.xls").Charts("Graph_PinPex")
For i = .SeriesCollection.Count To 1 Step -1
If i Mod 2 = 0 Then
.Legend.LegendEntries(i).Delete
End If
Next ...続きを読む


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

人気Q&Aランキング