複数のシートからデータを取得するExcelグラフを作成するにはどうすればよいですか? [閉まっている]

StackOverflow https://stackoverflow.com/questions/163363

  •  03-07-2019
  •  | 
  •  

質問

月ごとの売上高を別々のシートに保存しています。月ごとに複数の製品の売上のプロットを作成したいと思います。各製品は、同じチャートの異なる色の線で表され、各月はx軸に沿って実行されます。

複数のシート上の同じ相対セルからプルする単一の折れ線グラフを作成する最良の方法は何ですか?

役に立ちましたか?

解決

グラフウィザードを使用します。

ステップ2/4には、「シリーズ」というラベルのタブがあります。このタブには3つのフィールドとリストボックスがあります。リストボックスには、すでにチャートに含まれているさまざまなシリーズが表示されます。各シリーズには、「名前」とフィールドと「値」そのシリーズに固有のフィールド。最後のフィールドは、「カテゴリ(X)軸ラベル」です。すべてのシリーズに共通のフィールド。

「追加」をクリックしますリストボックスの下のボタン。これにより、空のシリーズがリストボックスに追加されます。 " Name"の値がおよび「値」の場合リストボックスでシリーズを強調表示するときに変更します。

新しいシリーズを選択します。

右側の各フィールドにはアイコンがあります。このアイコンを使用すると、データをプルするワークブック内のセルを選択できます。クリックすると、ウィザードは一時的に非表示になり(作業中のフィールドを除く)、ブックを操作できるようになります。

ワークブック内の適切なシートを選択し、チャートに表示するデータが含まれるフィールドを選択します。フィールドの右側にあるボタンをクリックして、ウィザードを再表示できます。

役立つこと。

編集:上記は2003年以前に適用されます。 2007年の場合、グラフが選択されると、「データの選択」を使用して同様のアクションを実行できるはずです。 " Design"のオプションリボンのタブ。これにより、チャートのシリーズをリストするダイアログボックスが開きます。 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<*>quot; & startR & ":$D<*>quot; & (r - 1)
            c.SeriesCollection(c.SeriesCollection.Count).Values = "='" & s.Name & "'!$E<*>quot; & startR & ":$E<*>quot; & (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<*>quot; & startR & ":$F<*>quot; & (r - 1), minusvalues:="='" & s.Name & "'!$F<*>quot; & startR & ":$F<*>quot; & (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<*>quot; & startR & ":$D<*>quot; & (r - 1)
            c2.SeriesCollection(c2.SeriesCollection.Count).Values = "='" & s.Name & "'!$G<*>quot; & startR & ":$G<*>quot; & (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<*>quot; & startR & ":$H<*>quot; & (r - 1), minusvalues:="='" & s.Name & "'!$H<*>quot; & startR & ":$H<*>quot; & (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はリボンでより強力になりました..:=) チャートに新しいシリーズを追加するには: [グラフ]を選択し、リボンの[グラフツールでデザイン]をクリックして、 デザインリボンで、[データの選択]を選択します。データグループでは、 [追加]ボタンが表示され、新しいシリーズが追加されます。

役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top