我有一個 Google 作業表,其中包含具有相同名稱的列,并且每列下都有不同的值。我想計算出現在同一列名稱下的相同值。
| 1個 | 2個 | 3個 | 1個 | 2個 |
|---|---|---|---|---|
| R | 乙 | C | R | 丁 |
| 丁 | C | R | 乙 | 丁 |
例如,我想獲得出現在“1”列下的數字“R”,因此我希望出現在第 1 列下的“R”的計數為 2。
這是包含實際資料的 Google 表格
試試這個公式,它輸出一個陣列,顯示每個列名稱中包含多少個字母:
=LAMBDA(NUMBERS,LETTERS,
LAMBDA(UNUM,ULET,
{
{"",TRANSPOSE(UNUM)};
{ULET,
MAKEARRAY(COUNTA(ULET),COUNTA(UNUM),LAMBDA(ROW,COL,
COUNTIF(FILTER(LETTERS,NUMBERS=INDEX(UNUM,COL)),INDEX(ULET,ROW))
))
}
}
)(UNIQUE(FLATTEN(NUMBERS)),UNIQUE(FLATTEN(LETTERS)))
)($A$1:$AE$1,$A$2:$AE$18)
假設您的示例資料范圍是A1:AE18.
apply
UNIQUE()和FLATTEN()toA1:AE1,以獲取列名的唯一條目。apply
UNIQUE()和FLATTEN()toA2:AE18,以獲取資料的唯一條目。用于
LAMBDA()將步驟 1 和 2 的資料范圍和輸出命名為:NUMBERS(=A1:AE1),LETTERS(=A2:AE18),UNUM(=UNIQUE(FLATTEN(NUMBERS))),ULET(=UNIQUE(FLATTEN(LETTERS))).
創建陣列
{},其中...第一列的值是空白,然后是
TRANSPOSE(UNUM)行中的,第一行的值是一個空白,后面是列中的值
ULET。在上述范圍內,用于
MAKEARRAY()創建結果。
MAKEARRAY()ROW通過定義和的長度來設定一個陣列COL,我們使用...COUNTA(ULET)作為行數和,COUNTA(UNUM)作為列數。
在內部
MAKEARRAY(),您還需要一個LAMBDA()應用程式來處理每個CELL新創建的陣列,每個陣列都由和索引CELL訪問。ROWCOLULET在我們的例子中,我們使用and設定新陣列的行號和列號UNUM。因此,每個CELL新陣列的索引將等于 和 中每個值的索引ULET,UNUM我們可以將其作為參考并使用COUNTIF()withFILTER()計算每個列名稱中每個字母的重復次數。
uj5u.com熱心網友回復:
你可以試試這個:
= ARRAYFORMULA(
query(
query(
SPLIT(TRANSPOSE(SPLIT(
QUERY(
TRANSPOSE(
QUERY(
TRANSPOSE(
IF(Original!A2:AE18<>"",
"??"&Original!A1:AE1&"?"&Original!A2:AE18, )
),,999^99)
),,999^99),
"??")),
"?"),
"Select Col1,Col2,count(Col2) group by Col1,Col2"),
"Select max(Col2),Col3 group by Col2,Col3 pivot Col1")
)
注意:(受到 player0 有用答案的啟發)
輸出:

我們可以從表中讀到:R 在名為“1”的列下出現了 40 次,在名為“2”的列下出現了 24 次,等等......
uj5u.com熱心網友回復:
以下是比以前的答案更緊湊的方法:
=arrayformula(query(split(flatten(A1:AE1&"|"&A2:AE18),"|"),"select Col2,count(Col2) group by Col2 pivot Col1"))
注意,我假設每列中分組值的順序是無關緊要的,因此字典順序的 QUERY 默認值很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/537021.html
標籤:谷歌表格数数
