鉴于以下现金流量的时间序列,我如何才能将其汇总为Excel中的现金流量的累积时间序列,理想情况下是仅使用数组公式且不使用VBA宏?
具体来说,我得到了每个交易的现金流时间序列:
考虑到每个时期的交易数量(在F列中),我希望能够计算总现金流量的总计时间序列(在G列中,以黄色突出显示),最好使用数组公式只有VBA宏吗?
注意:H到J列仅用于说明如何显示G列的计算方式,我不想在最终电子表格中包含它们。
非常感谢您的帮助!
答案 0 :(得分:2)
我相信您可以通过公式来做到这一点-最简单的方法是将现金流量转回并乘以当前和之前的5笔交易:
=SUMPRODUCT(INDEX(F:F,MAX(ROW()-5,3)):F16*INDEX(C:C,MAX(11-ROW(),3)):$C$8)
在G3中。
这是一个普通的非数组公式。
答案 1 :(得分:1)
确定,将此数组公式放入G3:
=IFERROR(SUMPRODUCT(INDEX($B$2:$B$7,N(IF({1},MODE.MULT(IF(INDEX(F:F,MAX(ROW()-5,3)):F3>0,(ROW()-ROW(INDEX(F:F,MAX(ROW()-5,3)):F3)+1)*{1,1}))))),INDEX(INDEX(F:F,MAX(ROW()-5,3)):F3,N(IF({1},MODE.MULT(IF(INDEX(F:F,MAX(ROW()-5,3)):F3>0,(ROW(INDEX(F:F,MAX(ROW()-5,3)):F3)-MIN(ROW(INDEX(F:F,MAX(ROW()-5,3)):F3))+1)*{1,1})))))),0)
作为数组公式,退出编辑模式时必须使用Ctrl-Shift-Enter而不是Enter进行确认。然后复制下来。
一旦Microsoft发布FILTER
和SEQUENCE
,它可以缩短:
=IFERROR(SUMPRODUCT(INDEX($B$2:$B$7,FILTER(SEQUENCE(ROW()-MAX(ROW()-5,3)+1,,ROW()-MAX(ROW()-5,3)+1,-1),INDEX(F:F,MAX(ROW()-5,3)):F3>0)),FILTER(INDEX(F:F,MAX(ROW()-5,3)):F3,INDEX(F:F,MAX(ROW()-5,3)):F3>0)),0)
答案 2 :(得分:1)
这也可以在Power Query中完成。
请参阅此article,以了解如何在您的Excel版本上使用 Power Query 。它在 Excel 2010 Professional Plus和更高版本中可用。我的演示使用的是 Excel 2016 。
步骤是:
time series of cash-flow
和您的2-column output table
这两个表都加载到电源查询编辑器中,然后您应该具有:Period
列与Cashflow
列合并,并用分号;
作为分隔符; ,
作为分隔符合并这些列; ="Connector"
添加自定义列,该公式将用单词Connector
填充该列,那么您应该具有:="Connector"
添加一个自定义列,该公式将用单词Connector
填充该列; Custom
列作为连接将第二个表与第一个表合并,然后展开新列以显示第一个表中的Merged
列,那么您应该:Custom
列,然后用定界符Merged
分隔,
列,并将结果放入行; Merged
分隔;
列,以将Period
和Cashflow
与第一张表分开; New Period
为=[Period]+[Merged.1]
的情况; Cashflow
为=[#"# Tran"]*[Merged.2]
,那么您应该具有以下内容:Cashflow
对New Period
列进行分组/求和。完成后,您可以关闭并加载结果到新的工作表中(默认情况下)。如果要在最终输出中显示# Trans
列,可以在进行任何更改之前复制第二张表,然后通过Period
列将其与最终输出表合并以显示相应的交易次数。
以下是第一张表的功率查询M代码:
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_CFS"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Period", Int64.Type}, {"Cashflow", Int64.Type}}),
#"Merged Columns1" = Table.CombineColumns(Table.TransformColumnTypes(#"Changed Type", {{"Period", type text}, {"Cashflow", type text}}, "en-AU"),{"Period", "Cashflow"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged"),
#"Transposed Table" = Table.Transpose(#"Merged Columns1"),
#"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Transposed Table", {{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}}, "en-AU"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
#"Added Custom" = Table.AddColumn(#"Merged Columns", "Custom", each "Connector")
in
#"Added Custom"
这是第二张表的代码:
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_Total"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Period", Int64.Type}, {"# Tran", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each "Connector"),
#"Merged Queries" = Table.NestedJoin(#"Added Custom", {"Custom"}, Tbl_CFS, {"Custom"}, "Tbl_CFS", JoinKind.LeftOuter),
#"Expanded Tbl_CFS" = Table.ExpandTableColumn(#"Merged Queries", "Tbl_CFS", {"Merged"}, {"Merged"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Tbl_CFS",{"Custom"}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Removed Columns", {{"Merged", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Merged"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Merged", type text}}),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Changed Type1", "Merged", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Merged.1", "Merged.2"}),
#"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Merged.1", Int64.Type}, {"Merged.2", Int64.Type}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type2", "New Period", each [Period]+[Merged.1]),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Cashflow", each [#"# Tran"]*[Merged.2]),
#"Grouped Rows" = Table.Group(#"Added Custom2", {"New Period"}, {{"Sum", each List.Sum([Cashflow]), type number}})
in
#"Grouped Rows"
所有步骤都使用内置函数,因此应该简单明了并且易于执行。让我知道是否有任何问题。干杯:)