月間売上高は別紙に保管しています。1か月あたりの複数の製品の売上のプロットを作成したいと思います。各製品は、同じチャート上で異なる色の線で表され、各月はx軸に沿って実行されます。
複数のシート上の同じ相対セルからプルする単一の折れ線グラフを作成するための最良の方法は何ですか?
月間売上高は別紙に保管しています。1か月あたりの複数の製品の売上のプロットを作成したいと思います。各製品は、同じチャート上で異なる色の線で表され、各月はx軸に沿って実行されます。
複数のシート上の同じ相対セルからプルする単一の折れ線グラフを作成するための最良の方法は何ですか?
チャートウィザードを使用します。
4のステップ2には、「シリーズ」というラベルの付いたタブがあります。このタブには3つのフィールドとリストボックスがあります。リストボックスには、チャートにすでに含まれているさまざまなシリーズが表示されます。各シリーズには、そのシリーズに固有の「名前」フィールドと「値」フィールドの両方があります。最後のフィールドは、すべてのシリーズに共通の「カテゴリ(X)軸ラベル」フィールドです。
リストボックスの下にある[追加]ボタンをクリックします。これにより、リストボックスに空白のシリーズが追加されます。リストボックスでシリーズを強調表示すると、「名前」と「値」の値が変わることに注意してください。
新しいシリーズを選択します。
右側の各フィールドにアイコンがあります。このアイコンを使用すると、ワークブック内のセルを選択してデータを取得できます。クリックすると、ウィザードは一時的に非表示になり(作業しているフィールドを除く)、ブックを操作できるようになります。
ワークブックで適切なシートを選択してから、グラフに表示するデータを含むフィールドを選択します。フィールドの右側にあるボタンをクリックすると、ウィザードを再表示できます。
お役に立てば幸いです。
編集:上記は2003年以前に適用されます。2007の場合、グラフを選択すると、リボンの[デザイン]タブにある[データの選択]オプションを使用して同様のアクションを実行できるはずです。これにより、チャートのシリーズを一覧表示するダイアログボックスが開きます。Excel 2003の場合と同じようにシリーズを選択できますが、カスタムシリーズを定義するには[追加]ボタンと[編集]ボタンを使用する必要があります。
動作する可能性のある Excel 2010 のコードを次に示します。いくつかの仕様 (タイトルから不適切なエンコード文字をフィルタリングするなど) がありますが、絶対データとパーセンテージ ベースのデータの両方を持つ 4 次元データから複数の複数シリーズ グラフを作成するように設計されています。好きなように変更してください:
Sub createAllGraphs()
Const chartWidth As Integer = 260
Const chartHeight As Integer = 200
If Sheets.Count = 1 Then
Sheets.Add , Sheets(1)
Sheets(2).Name = "AllCharts"
ElseIf Sheets("AllCharts").ChartObjects.Count > 0 Then
Sheets("AllCharts").ChartObjects.Delete
End If
Dim c As Variant
Dim c2 As Variant
Dim cs As Object
Set cs = Sheets("AllCharts")
Dim s As Object
Set s = Sheets(1)
Dim i As Integer
Dim chartX As Integer
Dim chartY As Integer
Dim r As Integer
r = 2
Dim curA As String
curA = s.Range("A" & r)
Dim curB As String
Dim curC As String
Dim startR As Integer
startR = 2
Dim lastTime As Boolean
lastTime = False
Do While s.Range("A" & r) <> ""
If curC <> s.Range("C" & r) Then
If r <> 2 Then
seriesAdd:
c.SeriesCollection.Add s.Range("D" & startR & ":E" & (r - 1)), , False, True
c.SeriesCollection(c.SeriesCollection.Count).Name = Replace(s.Range("C" & startR), "Â", "")
c.SeriesCollection(c.SeriesCollection.Count).XValues = "='" & s.Name & "'!$D$" & startR & ":$D$" & (r - 1)
c.SeriesCollection(c.SeriesCollection.Count).Values = "='" & s.Name & "'!$E$" & startR & ":$E$" & (r - 1)
c.SeriesCollection(c.SeriesCollection.Count).HasErrorBars = True
c.SeriesCollection(c.SeriesCollection.Count).ErrorBars.Select
c.SeriesCollection(c.SeriesCollection.Count).ErrorBar Direction:=xlY, Include:=xlBoth, Type:=xlCustom, Amount:="='" & s.Name & "'!$F$" & startR & ":$F$" & (r - 1), minusvalues:="='" & s.Name & "'!$F$" & startR & ":$F$" & (r - 1)
c.SeriesCollection(c.SeriesCollection.Count).ErrorBar Direction:=xlX, Include:=xlBoth, Type:=xlFixedValue, Amount:=0
c2.SeriesCollection.Add s.Range("D" & startR & ":D" & (r - 1) & ",G" & startR & ":G" & (r - 1)), , False, True
c2.SeriesCollection(c2.SeriesCollection.Count).Name = Replace(s.Range("C" & startR), "Â", "")
c2.SeriesCollection(c2.SeriesCollection.Count).XValues = "='" & s.Name & "'!$D$" & startR & ":$D$" & (r - 1)
c2.SeriesCollection(c2.SeriesCollection.Count).Values = "='" & s.Name & "'!$G$" & startR & ":$G$" & (r - 1)
c2.SeriesCollection(c2.SeriesCollection.Count).HasErrorBars = True
c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBars.Select
c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBar Direction:=xlY, Include:=xlBoth, Type:=xlCustom, Amount:="='" & s.Name & "'!$H$" & startR & ":$H$" & (r - 1), minusvalues:="='" & s.Name & "'!$H$" & startR & ":$H$" & (r - 1)
c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBar Direction:=xlX, Include:=xlBoth, Type:=xlFixedValue, Amount:=0
If lastTime = True Then GoTo postLoop
End If
If curB <> s.Range("B" & r).Value Then
If curA <> s.Range("A" & r).Value Then
chartX = chartX + chartWidth * 2
chartY = 0
curA = s.Range("A" & r)
End If
Set c = cs.ChartObjects.Add(chartX, chartY, chartWidth, chartHeight)
Set c = c.Chart
c.ChartWizard , xlXYScatterSmooth, , , , , True, Replace(s.Range("B" & r), "Â", "") & " " & s.Range("A" & r), s.Range("D1"), s.Range("E1")
Set c2 = cs.ChartObjects.Add(chartX + chartWidth, chartY, chartWidth, chartHeight)
Set c2 = c2.Chart
c2.ChartWizard , xlXYScatterSmooth, , , , , True, Replace(s.Range("B" & r), "Â", "") & " " & s.Range("A" & r) & " (%)", s.Range("D1"), s.Range("G1")
chartY = chartY + chartHeight
curB = s.Range("B" & r)
curC = s.Range("C" & r)
End If
curC = s.Range("C" & r)
startR = r
End If
If s.Range("A" & r) <> "" Then oneMoreTime = False ' end the loop for real this time
r = r + 1
Loop
lastTime = True
GoTo seriesAdd
postLoop:
cs.Activate
End Sub
2007 は、リボンを使用するとさらに強力になります..:=) チャートに新しいシリーズを追加するには: チャートを選択し、リボンの [チャート ツール] の [デザイン] をクリックします。[デザイン] リボンで、[データ グループ] の [データの選択] を選択します。新しいシリーズを追加するには、[追加] ボタンをクリックします。
それが役立つことを願っています。