
我有一個列表,排序後如下所示:
我需要一個公式來傳回每個條目列出的次數並刪除所有重複項。通常,我只是用眼睛計算數字或突出顯示相同的數字,並將計算的“計數”記錄在電子表格底部。然後我返回並刪除所有重複項,這是一個有點乏味的過程,我忍不住認為有一種更簡單的方法可以做到這一點。
我嘗試使用過濾器功能返回相鄰列中沒有數字的條目,但是當我去刪除重複項時,條目會向上移動,以便我已經手動輸入的數字不匹配。說實話,我有一種感覺,有一種方法可以讓 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()
函數將多個範圍資料轉換為單列數組,並排除重複項。 - 方法一--> 在第一種方法中,使用了
GROUPBY()
設計為 的函數group
,aggregate
並sort
根據我們指定的欄位。但是,上述功能Office-Insiders
一直存在,除非您啟用了該選項,否則這將無法運作並顯示為#NAME!
錯誤。 - 方法二--> 也從函數開始
LET()
,這樣更容易閱讀並減少冗餘範圍/公式的使用。 - 與第一種方法一樣,它首先應用
TOCOL()
函數,然後使用UNIQUE()
函數返回唯一值,最後使用MMULT()
函數返回計數,即兩個給定數組的矩陣乘積。 - 最後,使用 using組合使用和函數
HSTACK()
傳回的陣列以傳回所需的輸出。UNIQUE()
MMULT()
- 方法三--> 從與上面相同的步驟開始,除了它使用
BYROW()
函數來獲取每個項目的匹配計數。
但是,如果您發現這些方法很複雜,那麼您也可以使用最簡單的方法,如下所示:
- 首先,使用
TOCOL()
&UNIQUE()
函數將多個範圍傳回到一個陣列中,排除空值和重複項。並放入一個單元格中,比如說L2
=UNIQUE(TOCOL(A3:J16,1))
- 最後,輸入以下函數來取得計數。請記住,我已經採用了
A3:A16
您可能需要根據您的套裝進行更改的資料範圍。下面的內容不需要填寫,因為它會溢出。L2
上面使用TOCOL()
and返回的公式在哪裡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-CodeDone
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()
function 來獲得所需的輸出
您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)