我有一个两列表,由数据列和类别列组成。
我想以这样的方式重新组织表格,将类别列提升为列标题,并且它将列出属于列中特定类别的所有数据项(可能会发生某种排序),如下所示:
可以使用以下方法来完成此操作吗:
transpose(sort(unique(CATEGORY[])))
创建列标题和 filter(DATA[],CATEGORY[]=column header reference)
。但是,当我将公式拖到其他列以复制公式时,过滤器公式会互换,例如: D1 formula
=TRANSPOSE(SORT(UNIQUE(Table[CATEGORY])))
CATEGORY A
=filter(Table[DATA],Table[CATEGORY]=D1) - D1 is the cell reference of the A Header
CATEGORY B *becomes*
=filter(Table[CATEGORY],Table[DATA]=E1) - E1 is the cell reference of the B Header
CATEGORY C *becomes*
=filter(Table[DATA],Table[CATEGORY]=F1) - F1 is the cell reference of the C Header
*and so on and so forth*
using the # Operator after D1 produces an error
=filter(Table[DATA],Table[CATEGORY]=D1#)
专业功能 -
Lambda
、Let
、ToRow
或任何其他类似功能:表格的大小会有所不同,类别列需要灵活并适应要添加的新类型。我对这些功能不太熟悉,但我愿意了解它们。我只是不确定在这种情况下使用哪些函数。对第一个表中的类别列使用数据验证是不可行的
Pivot、Unpivot 或 PowerQuery - 如果见过的大多数问题都是相反的操作 - 如何将多个列组合成一个两列表。我该如何做相反的事情?
谢谢。
以下是使用适用于
MS365
的现代 Excel 公式的几种可能性:
• 对于第一个所需输出:
• 使用
PIVOTBY()
:
=LET(
α, B2:B11,
Σ, MAP(α,LAMBDA(ε, COUNTIF(ε:B2,ε))),
DROP(PIVOTBY(Σ, α, A2:A11,SINGLE,,0,,0),,1))
• 使用
REDUCE()
:
=LET(
a, B2:B11,
b, TOROW(UNIQUE(a)),
IFNA(DROP(REDUCE("",b,LAMBDA(x,y,HSTACK(x,
VSTACK(y, FILTER(A2:A11,a=y,""))))),,1),""))
• 使用
MAKEARRAY()
:
=LET(
a, B2:B11,
b, TOROW(UNIQUE(a)),
c, MAX(COUNTIF(a,a)),
d, MAKEARRAY(c,COLUMNS(b),LAMBDA(x,y,
INDEX(FILTER(A2:A11,a=INDEX(b,y)),x))),
IFERROR(VSTACK(b,d),""))
• 对于第二个所需输出:
使用
MAKEARRAY()
:
=LET(
a, B2:B11,
b, TOROW(UNIQUE(a)),
c, A2:A11,
d, MAKEARRAY(MAX(c), COLUMNS(b), LAMBDA(x,y,
FILTER(c,(INDEX(UNIQUE(c),x)=c)*(INDEX(b,y)=a),""))),
VSTACK(b,d))