下面是我尝试整理的数据的一个例子:
我正在寻找一种方法来自动查看每个名称#(行)的前3个类别(列)。类别的大小由类别下面的数字决定。理想情况下,我还希望看到每个类别的百分比细分(相对于合计)。例如,在“Name3”行中,2个类别在合计值中所占的比例要大得多。但是,如果没有此百分比细分,前3个值看起来似乎是可比的,而实际上并非如此。有兴趣看看这一切将如何与重复的号码,太。我试过Excel的排名函数,但它没有告诉我哪些类别有3个最大的大小,只是3个最高的值。
mwg9r5ms1#
使用Office 365:
=FILTER(SORTBY($B$1:$H$1,B2:H2,-1),SORT(B2:H2,1,-1,TRUE)>=LARGE(B2:H2,3))
抄下来。如果有关系,它将扩展结果以包括它。它查找第三高的值并返回等于或大于它的所有值。
hwamh0ep2#
这种方法一次溢出所有结果(数组版本)。在单元格J2中,您可以输入以下公式:
J2
=LET(D, A1:H5, A, TAKE(D,,1), DROP(REDUCE("", DROP(A,1), LAMBDA(ac,aa, VSTACK(ac, TAKE(SORT(DROP(FILTER(D, (A=aa) + (A="")),,1),2,-1,1),1,3)))),1))
根据输入数据,假设单元格A1为空(如果不是,则可相应调整),输出如下:
A1
下面是一个不需要预先假设的替代方案(但这并不是一个真正困难的假设):
=LET(names, A2:A5, Data, B2:H5, colors, B1:H1, DROP(REDUCE("", names, LAMBDA(ac,n, VSTACK(ac, TAKE(SORT(VSTACK(colors, INDEX(Data, XMATCH(n,names),0)) ,2,-1,TRUE),1,3)))),1))
非数组版本可以从前面的方法获得,并将其向下展开:
=TAKE(SORT(VSTACK($B$1:$H$1,INDEX($B$2:$H$5, XMATCH(A2,$A$2:$A$5),0)),2,-1,TRUE),1,3)
为了溢出整个解决方案,它使用DROP/REDUCE/VSTACK模式。请检查我对以下问题的回答:如何将Excel中表格从垂直转换为水平但长度不同。对于第一个公式,我们过滤A name的给定元素(aa)通过FILTER输入数据(D)以选择名称为空的行(考虑标题)或(加上(+)条件)名称等于aa。我们通过DROP删除筛选结果的第一列(名称列)。接下来,我们按列(SORT的最后一个输入参数,我们可以使用TRUE或1)以降序(-1)对第二行(前几行是颜色)执行SORT。最后,我们使用TAKE获取前三列和第一行。对于第二种方法,我们选择给定行的值(names等于n)并使用INDEX选择整行(列索引0),然后我们经由VSTACK形成阵列以添加colors作为第一行并使用与先前方法中类似的逻辑来排序和选择对应的行和列(x一米二十二分一x)。
DROP/REDUCE/VSTACK
A
aa
FILTER
D
+
DROP
SORT
TRUE
1
-1
TAKE
names
n
INDEX
0
VSTACK
colors
CHOOSE({1;2}, arr1,arr2)
arr1
arr2
INDEX/XMATCH
DROP(FILTER(Data, names=n),,1)
2条答案
按热度按时间mwg9r5ms1#
使用Office 365:
抄下来。
如果有关系,它将扩展结果以包括它。它查找第三高的值并返回等于或大于它的所有值。
hwamh0ep2#
这种方法一次溢出所有结果(数组版本)。在单元格
J2
中,您可以输入以下公式:根据输入数据,假设单元格
A1
为空(如果不是,则可相应调整),输出如下:下面是一个不需要预先假设的替代方案(但这并不是一个真正困难的假设):
非数组版本可以从前面的方法获得,并将其向下展开:
解释
为了溢出整个解决方案,它使用
DROP/REDUCE/VSTACK
模式。请检查我对以下问题的回答:如何将Excel中表格从垂直转换为水平但长度不同。对于第一个公式,我们过滤
A
name的给定元素(aa
)通过FILTER
输入数据(D
)以选择名称为空的行(考虑标题)或(加上(+
)条件)名称等于aa
。我们通过DROP
删除筛选结果的第一列(名称列)。接下来,我们按列(SORT
的最后一个输入参数,我们可以使用TRUE
或1
)以降序(-1
)对第二行(前几行是颜色)执行SORT
。最后,我们使用TAKE
获取前三列和第一行。对于第二种方法,我们选择给定行的值(
names
等于n
)并使用INDEX
选择整行(列索引0
),然后我们经由VSTACK
形成阵列以添加colors
作为第一行并使用与先前方法中类似的逻辑来排序和选择对应的行和列(x一米二十二分一x)。VSTACK
函数可用,那么您可以替换它如下:CHOOSE({1;2}, arr1,arr2)
,并用相应的数组替换arr1
、arr2
。INDEX/XMATCH
:DROP(FILTER(Data, names=n),,1)
,这是个人喜好的问题。