Как создать диаграмму Excel, которая извлекает данные из нескольких листов? [закрыто]
-
03-07-2019 - |
Вопрос
У меня ежемесячные данные о продажах, хранящиеся на отдельных листах. Я хотел бы создать график продаж для нескольких продуктов в месяц. Каждый продукт будет представлен разной цветной линией на одном и том же графике, где каждый месяц будет проходить вдоль оси x.
Как лучше всего создать однолинейную диаграмму, которая извлекает одинаковые относительные ячейки на нескольких листах?
Решение
Используйте мастер диаграмм.
На шаге 2 из 4 есть вкладка с надписью «Серия». На этой вкладке есть 3 поля и список. В окне списка отображаются разные серии, которые вы уже включили в график. Каждая серия имеет как " Имя " поле и «Значения» поле, специфичное для этой серии. Последнее поле - это «метки оси категории (X)»; поле, общее для всех серий.
Нажмите на кнопку " Добавить " кнопка под списком. Это добавит пустую серию в ваш список. Обратите внимание, что значения для " Имя " и для "значений" изменить, когда вы выделите серию в списке.
Выберите новую серию.
В каждом поле справа есть значок. Этот значок позволяет выбрать ячейки в рабочей книге для извлечения данных. Когда вы щелкаете по нему, мастер временно скрывается (за исключением поля, в котором вы работаете), позволяя вам взаимодействовать с книгой. Р>
Выберите соответствующий лист в рабочей книге, а затем выберите поля с данными, которые вы хотите отобразить на диаграмме. Можно нажать кнопку справа от поля, чтобы открыть мастер.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: вышесказанное относится к 2003 году и ранее. В 2007 году, когда выбран график, вы сможете выполнить аналогичное действие, используя " Выбрать данные " параметр "Дизайн" вкладка ленты. Откроется диалоговое окно со списком серий для диаграммы. Вы можете выбрать серию так же, как и в Excel 2003, но вы должны использовать " Добавить " и " Изменить " кнопки для определения пользовательских серий.
Другие советы
Вот код из Excel 2010, который может работать. У него есть пара особенностей (например, фильтрация плохо закодированных символов из заголовков), но он был разработан для создания нескольких многосерийных графиков из четырехмерных данных, имеющих как абсолютные, так и процентные данные. Измените его так, как вам нравится:
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 более мощный с лентой ..: =) Чтобы добавить новую серию в график, сделайте: Выберите Chart, затем нажмите Design в Chart Tools на ленте, На ленте "Дизайн" выберите " Выбрать данные " в группе данных, Затем вы увидите кнопку «Добавить» для добавления новой серии.
Надеюсь, что это поможет.