我有一个列表,排序后如下所示:
我需要一个公式来返回每个条目列出的次数并删除所有重复项。通常,我只是用眼睛计算数字,或者突出显示相同的数字,并在电子表格底部记录计算出的“计数”。然后我返回并删除所有重复项,这是一个有点繁琐的过程,我不禁想到有一种更简单的方法来做到这一点。
我曾尝试使用筛选功能返回相邻列中没有数字的条目,但当我删除重复项时,条目会上移,因此我手动输入的数字会不匹配。说实话,我觉得有一种方法可以让 Excel 计算并记录每个条目出现的次数(甚至无需先对其进行排序),但我对逻辑公式不太擅长,而且我在万维网上搜索过相关查询,但并没有真正帮助我弄清楚如何做到这一点。
目前我使用的是 Microsoft 365 版本的 Excel。
最终,我希望列表看起来像这样:
但花费的努力却更少。
对于那些想要了解更多细节的人,请继续阅读以了解整体情况。作为一个对健康饮食感兴趣的人,我会追踪我的摄入量,直至微量营养素,以确保我摄入的量足够,不超过任何推荐限度。每周一次,我会查看这些数据,找出我摄入不足的营养素。我有一个主电子表格,列出了各种营养素最丰富的食物。它看起来像这样:
如您所见,某些食物出现在多个列表中,而且由于我一天只能吃这么多食物,所以我想集中精力吃那些能让我物有所值的食物,因为它们出现在多个列表中。通常,我只是将确定缺乏的列复制并粘贴到单个列中,然后按字母顺序排序以获得计数。我添加这个细节是因为我觉得真正的 Excel 超级用户甚至不必像我一样费心进行笨重的复制和粘贴,只需从这个按营养成分分类的食物主电子表格中提取数字即可。
在此先感谢所有能帮助我更高效地使用 Excel 的人。
答案1
答案2
如果您有以下数据并使用,MS365
那么您可以执行以下方法:
纤维 | 钙 | 铁 | 镁 | 锌 | 铜 | 锰 | 碘 | 硒 | 氟化物 |
---|---|---|---|---|---|---|---|---|---|
海军豆 | 牛奶 | 强化谷物 | 南瓜子 | 牛肉 | 螃蟹 | 小麦胚芽 | 烤土豆 | 巴西坚果 | 红茶 |
扁豆 | 酸奶 | 麦麸片 | 杏仁 | 南瓜子 | 龙虾 | 红薯 | 牛奶 | 葵花籽 | 虾 |
斑豆 | 帕尔马干酪 | 粗粒 | 菠菜 | 葵花籽 | 香菇 | 羽衣甘蓝 | 虾 | 金枪鱼 | 葡萄干 |
鹰嘴豆 | 瑞士 | 格兰诺拉麦片 | 黑豆 | 扁豆 | 白色按钮 | 豌豆 | 火鸡 | 三文鱼 | 山莓 |
利马豆 | 干酪 | 碎小麦 | 三文鱼 | 火鸡 | 波塔贝拉斯 | 松子 | 海军豆 | 龙虾 | 煮熟的燕麦片 |
牛油果 | 菠菜 | 米浆 | 酸奶 | 蛋 | 奶油小生菜 | 榛子 | 蛋 | 虾 | 啤酒 |
南瓜子 | 羽衣甘蓝 | 牛肉 | 牛奶 | 香菇 | 红薯 | 胡桃 | 猪里脊肉 | 红葡萄酒 | |
芝麻籽 | 芜菁叶 | 碎牛肉 | 牛油果 | 芜菁叶 | 燕麦 | 牛肉 | 苹果酒 | ||
杏仁 | 西兰花 | 牛里脊 | 香蕉 | 烤土豆 | 利马豆 | 羊肉 | 粗粒 | ||
开心果 | 黑眼豆豆 | 水牛里脊肉 | 菠菜 | 鹰嘴豆 | 鸡 | 黑豆汤 | |||
胡桃 | 海军豆 | 地面野牛 | 葵花籽 | 海军豆 | 火鸡 | 烤土豆 | |||
葵花籽 | 三文鱼 | 波特豪斯 | 南瓜子 | 扁豆 | 海军豆 | 萝卜 | |||
橡子南瓜 | 橡子南瓜 | 牛肉炖肉 | 巴西坚果 | 菠菜 | 斑豆 | 菠菜 | |||
哈伯德南瓜 | 龙虾 | 猪里脊肉 | 核桃 | 菠萝 | 利马豆 | 哈密瓜 |
• 使用仅GROUPBY()
适用于MS365
--> 的功能Office Insiders
。
=LET(
_Data, A3:J16,
_SingleCol, TOCOL(_Data,1),
GROUPBY(_SingleCol,_SingleCol,ROWS,,0,-2))
或者,使用BYROW()
或MMULT()
=LET(
_Data, A3:J16,
_SingleCol, TOCOL(_Data,1),
_Uniq, UNIQUE(_SingleCol),
_Counts, MMULT(N(_Uniq=TOROW(_SingleCol)),SEQUENCE(ROWS(_SingleCol))^0),
HSTACK(_Uniq,_Counts))
=LET(
_Data, A3:J16,
_SingleCol, TOCOL(_Data,1),
_Uniq, UNIQUE(_SingleCol),
_Counts, BYROW(_Uniq,LAMBDA(x,SUM(--(x=_SingleCol)))),
HSTACK(_Uniq,_Counts))
- 上面显示的所有公式都给出了每个唯一记录的计数数。
- 使用
TOCOL()
函数将多个范围的数据转换为单列数组,排除重复项。 - 方法 1--> 在第一种方法中,使用了
GROUPBY()
专门设计的函数group
,aggregate
并sort
根据我们指定的字段。但是,所述函数处于启用Office-Insiders
状态,因此,除非您启用了该选项,否则它将不起作用并显示为#NAME!
错误。 - 方法 2--> 也从函数开始
LET()
,这使得更容易阅读并减少冗余范围/公式的使用。 - 与第一种方法一样,它首先应用
TOCOL()
函数,然后使用UNIQUE()
函数返回唯一值,最后使用MMULT()
函数返回计数,即两个给定数组的矩阵乘积。 - 最后,使用和函数
HSTACK()
组合返回的两个数组来返回所需的输出。UNIQUE()
MMULT()
- 方法 3--> 从与上面相同的步骤开始,只是它使用
BYROW()
函数来获取每个项目的匹配计数。
但是,如果您发现这些方法很复杂,那么您也可以使用下面显示的最简单的方法:
- 首先,使用
TOCOL()
&UNIQUE()
函数将多个范围返回到一个数组中(不包括空值和重复值)。然后将其放在一个单元格中,比如说L2
=UNIQUE(TOCOL(A3:J16,1))
- 最后,输入以下函数来获取计数。请记住,我已经取了数据范围,
A3:A16
您可能需要根据您的情况进行更改。以下内容不需要填写,因为它会溢出。使用和L2
从上面返回的公式在哪里TOCOL()
UNIQUE()
=COUNTIFS(A3:J16,L2#)
如果你仍然不愿意遵循上述内容,那么你可以使用POWER QUERY
从开始可用Excel 2010+
的、可用的Windows Excel 2010+
和Excel 365 (Windows or Mac)
要使用 Power Query,请按照以下步骤操作:
- 首先将源范围转换为表格并进行相应命名,在此示例中,我将其命名为
Table1
- Data接下来,从Tab --> Get & Transform Data--> Get Data--> From Other Sources-->打开一个空白查询Blank Query
- 上面的命令可以Power Query打开窗口,现在从HomeTab --> Advanced Editor--> 删除您看到的任何内容并粘贴以下内容M-Code,然后按Done
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Columns" = Table.UnpivotOtherColumns(Source, {}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Columns",{"Attribute"}),
#"Grouped Rows" = Table.Group(#"Removed Columns", {"Value"}, {{"Count", each Table.RowCount(_), Int64.Type}})
in
#"Grouped Rows"
- 最后,将其导回Excel--> 单击Close & Load或Close & Load To--> 第一个单击的将创建一个New Sheet具有所需输出的,而后者将提示一个窗口询问您将结果放在何处。
注意:公式无法删除重复项,而是在特定条件下放入单元格时提取值。如我上面所示。您基本上需要UNIQUE()
、TOCOL()
&COUNTIF()
或COUNTIFS()
函数来获得所需的输出
只需将此Rough List
公式放在任意空白单元格中,List
其中的名称为Table
:
=LET(
_Uniq, UNIQUE(List),
_Output, SORT(HSTACK(_Uniq, COUNTIF(List,_Uniq)),2,-1),
VSTACK({"Nutrients","Counts"},_Output))
如果适用的话,使用函数会更容易GROUPBY()
:
=GROUPBY(List,List,ROWS,,0,-2)