Excel多系列重叠图表制作求助:基于含系列列的测力计数据
解决Excel多系列图表自动生成问题
一、修复当前公式错误
你用=SE(Test[Source.Name]="a.xml";Test[encoder1])报错,原因是直接在图表数据区域输入这类数组公式时,意大利语版Excel无法正确识别未明确为数组的动态范围。改用FILTRO函数(对应英文FILTER)提取对应系列的X/Y值,语法更适配动态数据:
- 提取a.xml的X值:
=FILTRO(Test[encoder1];Test[Source.Name]="a.xml") - 提取a.xml的Y值:
=FILTRO(Test[ch1];Test[Source.Name]="a.xml")
输入后按回车即可(动态数组会自动溢出结果),将这两个公式的结果区域作为图表系列的X/Y数据源即可。
二、自动适配新增数据的多系列图表方案
方案1:PowerQuery转置数据(推荐,无需复杂公式)
- 打开PowerQuery编辑器,找到你的导入数据步骤
- 添加「透视列」操作:
- 透视列选择
Source.Name,值列选择ch1,聚合函数选「不要聚合」 - 此时表格会变成:encoder1作为首列,每个XML文件对应一列ch1值
- 透视列选择
- 关闭并上载数据到Excel,选中整个表格插入散点图(或折线图)
- 后续新增XML文件时,只需刷新PowerQuery,表格会自动新增列,图表也会自动添加对应系列
方案2:命名管理器+动态数组(适合保留原数据结构)
- 打开「公式」选项卡→「名称管理器」,创建以下命名范围:
- 名称:
AllSeries,引用位置:=UNICO(Test[Source.Name])(UNICO对应英文UNIQUE,提取所有唯一系列名) - 对每个系列,创建动态X/Y名称(可通过VBA批量生成,避免手动操作):
比如对系列a.xml,名称X_a,引用位置:=FILTRO(Test[encoder1];Test[Source.Name]="a.xml");名称Y_a,引用位置:=FILTRO(Test[ch1];Test[Source.Name]="a.xml")
- 名称:
- 插入空白散点图,通过VBA遍历
AllSeries中的每个系列,自动添加图表系列:
示例VBA代码:Sub AddDynamicSeries() Dim cht As Chart Dim seriesList As Variant Dim i As Integer Set cht = ActiveSheet.ChartObjects("Chart1").Chart cht.SeriesCollection.Delete '清空现有系列 seriesList = Range("AllSeries").Value '获取所有系列名 For i = 1 To UBound(seriesList) With cht.SeriesCollection.NewSeries .Name = seriesList(i, 1) .XValues = "=Test!" & ThisWorkbook.Names("X_" & Replace(seriesList(i, 1), ".xml", "")).RefersToRange.Address .Values = "=Test!" & ThisWorkbook.Names("Y_" & Replace(seriesList(i, 1), ".xml", "")).RefersToRange.Address End With Next i End Sub - 后续新增数据后,刷新
AllSeries的命名范围,运行VBA宏即可自动添加新系列
内容的提问来源于stack exchange,提问作者GiacomoDB
相关产品推荐
相关产品推荐

