我将每月的销售数据存储在单独的表格中。 我想创建每月多种产品的销售图。 每个产品将在同一张图表上用不同颜色的线表示,每个月沿着 x 轴运行。
创建从多个工作表上的相同相关单元格中提取的单个折线图的最佳方法是什么?
使用图表向导。
在第 2 步(共 4 步)中,有一个标签为“系列”的选项卡。此选项卡上有 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年有丝带更强大..:=) 要在图表中添加新系列,请执行以下操作: 选择“图表”,然后单击功能区上“图表工具”中的“设计”, 在“设计”功能区上,选择“数据组”中的“选择数据”, 然后您将看到“添加”按钮以添加新系列。
希望这会有所帮助。