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