其实我想出了一个有点复杂和冗长的答案:
这里是截图:
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 使用公式重新排列数据
或您可以使用此公式将其重新排列到一个单独的列中,向下拖动直到得到零:
=OFFSET($A$1,
MOD(ROW()-ROW($F$1),ROWS($A$1:$A$10)),
TRUNC((ROW()-ROW($F$1))/ROWS($A$1:$A$10)),1,1)
2.计数和排名
然后把这个公式放在H列中(向下拖到最后):
=IF(A1="","",IF(COUNTIF(A$1:A1,A1)=COUNTIF($A$1:$A$1000,A1),COUNTIF($A$1:$A$1000,A1)+(ROW()/1000),""))
- 按降序读取和排序数据
在第一列中使用这个公式(向下拖动直到结束):
=IF(ROWS($1:1)>COUNT(H:H),"",INDEX(A:A,MATCH(LARGE(H:H,ROWS($1:1)),H:H,0)))
- 统计频率
在J列中使用此公式(向下拖动直到结束):
=IF(I1="","",COUNTIF($A$1:$A$1000,I1))
这里是demo worksheet downloadable
Sheet1:A 列使用 VBA 宏排序,并且在 sheet2 它是使用公式排序的
如果出现问题,请告诉我。