在 Excel 中创建多折线图 - 使用计算?
Creating a multi-line chart in Excel - with calculations?
亲爱的 Whosebug 参与者,
我的post之前是模棱两可的,所以这是第二次尝试。
我有以下 table 数据:
以及我想制作的手绘示例:
- Depiction of required chart with explanations of calcs
- More of a basic depiction of required chart
我想生成一个图表,显示具有相同前四位数字的所有代码(原始图表数据图片的左侧列)的计算值。我想为每个日期显示一个数据点,将 "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, bSeries
和 dateSeries
作为情节。
应设置图表轴来处理每周数据点。
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
更多版本信息:
亲爱的 Whosebug 参与者,
我的post之前是模棱两可的,所以这是第二次尝试。
我有以下 table 数据:
以及我想制作的手绘示例:
- Depiction of required chart with explanations of calcs
- More of a basic depiction of required chart
我想生成一个图表,显示具有相同前四位数字的所有代码(原始图表数据图片的左侧列)的计算值。我想为每个日期显示一个数据点,将 "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, bSeries
和 dateSeries
作为情节。
应设置图表轴来处理每周数据点。
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
更多版本信息: