问:如图 1所示的列表,如果需要针对列表中的每一行都单独创建一个图表系列,如何快速实现?
问:如图 1所示的列表,如果需要针对列表中的每一行都单独创建一个图表系列,如何快速实现?
图 1
答:方法一:使用公式
首先,将图 1 所示的数据进行整理,如图 2 所示。
图 2
其中,第 1 行的 D1:G1 中为列 A 中的不重复项。
在单元格 D2 中输入公式:
= IF($ A2 = D $ 1,$ C2,NA())
先进至单元格区域 D2:G14 。
选择单元格区域 B1:B14 ,按住 Ctrl 键不放,选择单元格区域 D1:G14 。
插入 XY 散点图,结果如图 3 所示。
图 3
注:在折线图或 XY 散点图中,#N / A 值不会被替换;在条形图或柱状图上,空字符串 ”” 不会被替换。
方法二:使用 VBA
使用循环读取单元格区域的第 1 列,依次通过第 1 列进入行组合,依次每个组合作为图表的一个系列。
首先选择图表,然后运行下面的 VBA 程序,会依次图 4 所示的这种,要求输入数据区域。
图 4
单击确定后,结果如图 5 所示。
图 5
代码如下:
子CreateChartByRow()
暗淡作为图表
调光范围
Dim strPrompt作为字符串
尽可能长的昏暗
点心系列
调光行
Dim lngRowStart只要长
只要Dim lngRowEnd
Dim strSeries作为字符串
如果ActiveChart一无所获
MsgBox“ 请选取图表并重试。”,vbExclamation
转到ExitSub
万一
strPrompt =“ 选择包含数据的 3 列单元格区域。”
strPrompt = strPrompt&vbNewLine&“ 第 1 列:系列标题 ”
strPrompt = strPrompt&vbNewLine&“ 第 2 列: X 值 ”
strPrompt = strPrompt&vbNewLine&“ 第 3 列: Y 值 ”
strPrompt = strPrompt&vbNewLine&“ 避免空单元格 ”
关于错误继续
设置rng = Application.InputBox(Prompt:= strPrompt,Type:= 8)
出错时转到0
如果rng什么都没有,则转到ExitSub
设置cht = ActiveChart
做
如果cht.SeriesCollection.Count = 0那么退出
cht.SeriesCollection(1)。删除
循环
strSeries =“”
lngSrs = 0
对于lngRow = 1到rng.Rows.Count + 1
如果rng.Cells(lngRow,1).Value <> strSeries或lngRow> rng.Rows.Count然后
如果lngSrs> 0然后
lngRowEnd = lngRow-1
设置srs = cht.SeriesCollection.NewSeries
与srs
.values = rng.Cells(lngRowStart,3).Resize(lngRowEnd +1-lngRowStart)
.XValues = rng.Cells(lngRowStart,2).Resize(lngRowEnd +1-lngRowStart)
.Name = rng.Cells(lngRowStart,1).Value
.ApplyDataLabelsShowSeriesName:=正确,_
ShowCategoryName:= False,ShowValue:= False
结束于
万一
lngRowStart = lngRow
strSeries = rng.Cells(lngRow,1).Value
lngSrs = lngSrs + 1
万一
下一个
ExitSub:
Application.ScreenUpdating = True
结束