计算 Google Sheet 单元格中数字每次出现的公式

Formula to count each occurence of a number in a Google Sheet cells

有了这个table;

我需要一个公式来找到范围内出现的每个数字并将它们降序排列,例如;

目前我有这个公式,但它不能按需要工作:(

=ArrayFormula(QUERY({A1:F10,LEN(A1:F10)}, "select Col1, count(Col2) where Col2 > 0 group by Col1 order by count(Col2) desc",0))

其实我想出了一个有点复杂和长的答案:

截图如下:



1.a 使用 MACRO

重新排列数据

首先,您需要将数据重新排列到一个列中,比如说将它们全部放在 A 列中: 我用这个宏做了这个:

Sub convertAllColumnstoONE()
Dim oneColumnHead As Range
Dim columnHeads As Range

With ThisWorkbook.Sheets("sheet1")
    Set columnHeads = Range(.Cells(1, 2), .Cells(1, .Columns.Count).End(xlToLeft))
End With

For Each oneColumnHead In columnHeads
    With oneColumnHead.EntireColumn
        With Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
            .Parent.Cells(.Parent.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(.Rows.Count, 1).Value = .Value
        End With
    End With
Next oneColumnHead
End Sub



1.b 使用公式重新排列数据 OR 您可以使用此公式将其重新排列到一个单独的列中,拖动并向下填充直到得到零:

=OFFSET($A,
MOD(ROW()-ROW($F),ROWS($A:$A)),
TRUNC((ROW()-ROW($F))/ROWS($A:$A)),1,1)



2.计数和排名

然后将此公式放入H列(拖动并向下填充直到最后):

=IF(A1="","",IF(COUNTIF(A:A1,A1)=COUNTIF($A:$A00,A1),COUNTIF($A:$A00,A1)+(ROW()/1000),""))



  1. 读取数据并降序排序

列 I 中使用此公式(拖动并向下填充直到结束):

=IF(ROWS(:1)>COUNT(H:H),"",INDEX(A:A,MATCH(LARGE(H:H,ROWS(:1)),H:H,0)))



  1. 统计频率

列J中使用这个公式(拖动并向下填充直到最后):

=IF(I1="","",COUNTIF($A:$A00,I1))



这里是demo worksheet downloadable
Sheet1 : A 列使用 VBA 宏和 in 排序sheet2 使用公式排序

如果出现问题请告诉我。

在 google 电子表格中,您可以尝试:

=query(if({1,1}, ArrayFormula(transpose(split(concatenate(A1:F&char(9)), char(9))))), "select Col1, Count(Col2) group by Col1 order by Count(Col2) desc")

Example spreadsheet(J1中的公式)