在 Excel 中创建多折线图 - 使用计算?

Creating a multi-line chart in Excel - with calculations?

亲爱的 Whosebug 参与者,

我的post之前是模棱两可的,所以这是第二次尝试。

我有以下 table 数据:

以及我想制作的手绘示例:

我想生成一个图表,显示具有相同前四位数字的所有代码(原始图表数据图片的左侧列)的计算值。我想为每个日期显示一个数据点,将 "A" 列下的所有值相加。我会对 "B" 列做同样的事情。 "P" 数据点是有问题的,因为它会使用以相同的前四位数字开头的 each 代码进行计算。我指的是 "A"、"B" 和 "P",它们位于电子表格顶部的每个日期下方,如原始图表数据图片中所示。

"P" 是一个 % 值,并且对于给定的单个代码具有相应的 "A" 和 "B" 数值。对于具有相同前四位数字的每个单个代码,我会将 P 与 B 相乘,然后对每个结果求和。然后我将该总和除以那些相同的单个代码的所有 "B" 值的总和。

我想为每组以相同的四位数字开头的唯一代码创建一个 3 折线图。正如评论中所建议的那样,将 "P" 值作为辅助轴是有意义的,并将主轴用于 "A" 和 "B".

这些代码会更改,并且每周都会添加新的日期和相关值,因此我希望随着原始数据的添加使此图表动态变化 to/altered。

有什么方法可以对 Excel 中的图表执行这样的计算吗?我 认为 我对 VBA 和 Excel 的公式足够熟悉,但我想我会找到答案。

谢谢大家,

安格斯

2 sheet set-up.

1) Sheet1 被调用 DataSheet 并镜像您的数据输入 sheet.

2) Sheet2 被称为 ChartData 并且具有用于绘制图表的转换数据集和图表本身。这就是您实际希望数据集用于制图的方式。因此,如果您可以更改报告的格式,那么请始终尝试做出如图所示的 'flat-file' table 安排。

这是 "after" 状态下的样子:

数据Sheet sheet:

dataSheet 中的单元格 B2 您可以输入 4 位代码来绘制图表。

注意前导 ' 以保留开头的 0。

第 4 行的公式:

A) F4 p:

=IFERROR(SUMPRODUCT(OFFSET($A,0,SUM(COLUMN(H1)-1),COUNTA(Codes),1),--(LEFT(Codes,4)=$B),OFFSET($A,0,SUM(COLUMN(F1)-1),COUNTA(Codes),1))/H4,"")

这应用 p 计算

B) A 的 G4:

=SUMPRODUCT(OFFSET($A,0,SUM(COLUMN(G1)-1),COUNTA(Codes),1),--(LEFT(Codes,4)=$B))

对于给定的 4 位起始代码,G 列的总和。

C) H4 B:

=SUMPRODUCT(OFFSET($A,0,SUM(COLUMN(H1)-1),COUNTA(Codes),1),--(LEFT(Codes,4)=$B))

对于给定的 4 位起始代码,H 列求和。

您可以将这些复制粘贴到 3 个块中以设置未来范围的公式,即 select F4:H4 并复制到 I4:K4 等,公式将适用于新范围。抱歉,我还没有调整这些所以可以以某种方式拖动。

感谢@Tom Sharpe 和@shrivallabha.redij 解决了和积之谜,,它构成了解决方案的一部分。

图表数据Sheet:

A) B4中的公式:

=DataSheet!F2

这确保开始日期设置为您范围内的第一个日期。

B) B5中的公式向下拖动B列:

=IF(ROWS($B:$B5) <=INT(COLUMNS(dates)/3),$B+ROWS($B:$B5)*7,NA())

这确保日期在所需的周数内每周递增(即加 7 天)。由于每个日期重复 3 次,动态范围 dates 中的列数(涵盖数据第 2 行中的所有日期Sheet)除以 3 得到周数实际上应该被绘制。如果超过此数字,将输出#N/A,因为这不会绘制在图表上。

C) C4 中的公式,它被拖到 C 列下,并跨越您正在使用的尽可能多的列,即所示示例中的 E 列:

 =IFNA(INDEX(SOquestions.xlsb!dataRange,MATCH($B4,dates,0)+COLUMNS($E:E)-1),NA())

这将检索 B 列日期的 p, A and B 值。 dataRange 是在 dataSheet 中保存源计算的动态范围。如果您打开名称管理器 select dataRange,然后将光标放在引用范围内,它引用的动态范围由 "marching ants":

勾勒出来

如果日期列 (B) 在 chartData sheet 中是 #N/A 那么关联的 p、A 和 B 默认为 #N/A 所以不是绘制。

绘制图表:

图表本身是一个包含 4 个动态系列的组合图表。

系列以正常方式添加,但您引用前面有 Sheetname! 的动态系列;如图所示。您使用 pSeries,aSeries, bSeriesdateSeries 作为情节。

应设置图表轴来处理每周数据点。

Combo-chart set-up:

注意 p 绘制在次要 x-axis 上并以百分比格式显示。

更新过程:

1) 在数据中添加新行Sheet

2) 将三列的块复制到下一列。请注意,该块的第一列有一个 +7 来增加周

3) 转到 ChartData 并将公式向下拖动到 B:E

列中

4) Select 您感兴趣的代码,在 dataSheet 单元格 B2 中,所有内容都会更新。

所需的命名范围:

使用了动态命名范围。 Ctrl & F3 将调出名称管理器,您可以添加这些。

动态命名范围的公式:

代码

=OFFSET(DataSheet!$A,0,0,COUNTA(DataSheet!$A:$A48576),1)

数据范围

=OFFSET(DataSheet!$F,0,0,1,COUNT(DataSheet!$F:$XFD))

日期

=OFFSET(DataSheet!$F,0,0,1,COUNT(DataSheet!$F:$XFD))

p系列

=OFFSET(DataSheet!$P,0,0,COUNT(DataSheet!$B:$B48576),1)

系列

=OFFSET(ChartData!$D,0,0,COUNT(ChartData!$B:$B48576),1)

b系列

=OFFSET(ChartData!$E,0,0,COUNT(ChartData!$B:$B48576),1)

日期系列:

=OFFSET(ChartData!$B,0,0,COUNT(ChartData!$B:$B48576),1)

注意:对于早期版本Excel结束行和列必须进行调整

结束行 1048576 变为 65536 结束栏 XFD 变为 IV

更多版本信息:

http://www.excelfunctions.net/Excel-2003-vs-Excel-2007.html