答案1
以下是其中一种方法:
• 单元格中使用的公式I4
=VLOOKUP($H4,INDIRECT($I$1),MATCH(I$3,HEADERS,0),0)
- 定义一些范围以使公式根据下拉菜单相应地工作。
- 范围
=$B$4:$F$7
定义为SHOP1
- 范围
=$B$11:$F$14
定义为SHOP2
- 由于每个标题都相同,因此为
SHOPS
其中一个定义SHOPS
HEADERS
=$B$3:$F$3
- 接下来,使用
VLOOKUP()
如上所示的公式,向下填充并向右填充!
然而,如果你打算使用SUMIFS()
建议你使用SUMPRODUCT()
或SUM()
基于你的Excel Version
• 单元格中使用的公式I4
=SUMPRODUCT(INDIRECT($I$1)*(Criteria_Range=$H4)*(I$3=HEADERS))
- 对定义的名称进行一些更改。如下所示:
范围
=$C$4:$F$7
定义为SHOP1
范围
=$C$11:$F$14
定义为SHOP2
范围
=$C$3:$F$3
定义为HEADERS
范围
=$B$4:$B$7
定义为Criteria_Range
- 现在,使用上述公式向下填充并向右填充!
也许使用SUMIFS()
定义的命名范围与使用第一种方法相同VLOOKUP()
=SUMIFS(INDEX(INDIRECT($I$1),,MATCH(I$3,HEADERS,0)),INDEX(INDIRECT($I$1),,1),$H4)
• 如果您有权访问MS365
,请使用以下命令,这是一个将溢出整个数组的单一公式:
=LET(
_Data, VSTACK(EXPAND(SHOP1,,6,"SHOP1"),EXPAND(SHOP2,,6,"SHOP2")),
_Filtered, FILTER(_Data, TAKE(_Data,,-1)=I1),
MAKEARRAY(ROWS(H22:H24), COLUMNS(I21:L21), LAMBDA(r,c,
VLOOKUP(INDEX(H22:H24,r),_Filtered,XMATCH(INDEX(I21:L21,c),HEADERS),0))))
警告:使用INDIRECT()
函数并不具有建议性,因为它Volatile
本质上会降低工作功能,Excel
并且每当打开的工作簿发生变化时,它都会不断重新计算单元格。您应该对数据结构进行一些更改,以使您的工作变得轻松,避免使用易失性函数。
这也可以通过使用Windows 和 MAC 及以上版本POWER QUERY
提供的功能来实现。Excel 2010+
- 首先将源范围转换为表格并进行相应命名,在此示例中,我将 for
SHOP1
asSHOP_1
、 forSHOP2
asSHOP_2
和 forChannel
as命名为Channeltbl
- Data接下来,从Tab --> Get & Transform Data--> Get Data--> From Other Sources-->打开一个空白查询Blank Query
- 上面的命令可以Power Query打开窗口,现在从HomeTab --> Advanced Editor--> 删除您看到的任何内容并粘贴以下内容M-Code,然后按Done
• 对于输出:
let
Source = Excel.CurrentWorkbook(),
#"Filtered Rows" = Table.SelectRows(Source, each Text.StartsWith([Name], "SHOP")),
#"Expanded Content" = Table.ExpandTableColumn(#"Filtered Rows", "Content", {"Expense Type", "January", "February", "March", "April"}, {"Expense Type", "January", "February", "March", "April"}),
#"Filtered Rows1" = Table.SelectRows(#"Expanded Content", each ([Name] = CHANNEL)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows1",{"Name"}),
#"Filtered Rows2" = Table.SelectRows(#"Removed Columns", each [Expense Type] <> "Total Budget")
in
#"Filtered Rows2"
• 对于频道:
let
Source = Excel.CurrentWorkbook(){[Name="Channeltbl"]}[Content],
CHANNEL = Source{0}[CHANNEL]
in
CHANNEL
- 请记住,您需要将上述内容粘贴到两个不同的空白查询中。此外,
CHANNEL
查询将是一个连接,而另一个查询需要输入到工作表中。
- 最后,将其导回Excel--> 单击Close & Load或Close & Load To--> 第一个单击的将创建一个New Sheet具有所需输出的,而后者将提示一个窗口询问您将结果放在何处。