Как создать диаграмму Excel, которая извлекает данные из нескольких листов? [закрытый]

У меня есть ежемесячные цифры продаж, хранящиеся в отдельных листах. Я хотел бы создать график продаж для нескольких продуктов в месяц. Каждый продукт будет представлен в другой цветной линии на том же графике с каждым месяцем, проходящим вдоль оси X.

каков наилучший способ создания одной линейной диаграммы, которая тянет из одних и тех же относительных ячеек на нескольких листах?

3 ответов


используйте мастер диаграмм.

на Шаге 2 из 4, есть вкладка "серии". На этой вкладке есть 3 поля и список. В списке отображаются различные серии, которые вы уже включили в диаграмму. Каждая серия имеет как поле "Имя", так и поле "значения", специфичное для этой серии. Конечным полем является поле " метки оси категории (X)", которое является общим для всех рядов.

Нажмите кнопку "Добавить"под списком. Это добавит пустую серию к твой список. Обратите внимание, что значения для "Name" и "Values" изменяются при выделении ряда в списке.

выберите новую серию.

в каждом поле справа есть значок. Этот значок позволяет выбрать ячейки в книге для извлечения данных. При нажатии на него мастер временно скрывается (за исключением поля, в котором вы работаете), позволяя вам взаимодействовать с книгой.

выберите соответствующий лист в книгу, а затем выберите поля данных, которые вы хотите показать на диаграмме. Кнопка справа от поля может быть нажата, чтобы отобразить мастер.

надеюсь, это поможет.

EDIT: вышесказанное относится к 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 более мощный с лентой..:=) Добавление новых рядов в диаграмму do: Выберите диаграмму, затем щелкните дизайн в инструментах диаграммы на ленте, На ленте дизайн выберите "Выбрать данные" в группе данных, Затем вы увидите кнопку Добавить, чтобы добавить новую серию.

надеюсь, что поможет.