计算 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),""))
- 读取数据并降序排序
在列 I 中使用此公式(拖动并向下填充直到结束):
=IF(ROWS(:1)>COUNT(H:H),"",INDEX(A:A,MATCH(LARGE(H:H,ROWS(:1)),H:H,0)))
- 统计频率
在列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中的公式)
有了这个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),""))
- 读取数据并降序排序
在列 I 中使用此公式(拖动并向下填充直到结束):
=IF(ROWS(:1)>COUNT(H:H),"",INDEX(A:A,MATCH(LARGE(H:H,ROWS(:1)),H:H,0)))
- 统计频率
在列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中的公式)