Option Explicit
Sub TEST()
Dim Brr, V, Y, i&, j&, N1&, N2&, T$, P1$, P2$
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = [A2:J10]
'↑令Brr變數是 二維陣列,以[A2:J10]儲存格值帶入陣列中
For i = 1 To UBound(Brr, 1)
'↑設順迴圈!i從1到Brr縱向最大索引列號
'(UBound(Brr, 1)可以簡化為UBound(Brr)
For j = 1 To UBound(Brr, 2)
'↑設順迴圈!i從1到Brr橫向最大索引欄號
T = Brr(i, j)
'↑令T變數是 i迴圈列j迴圈欄Brr陣列值
'用個變數裝陣列值的好處:
'1.讓陣列值定義為字串,納入字典不必加"" 例如:Y(Brr(i,j) & "")=""
'2.縮短程式碼長度,因為Brr(i, j)在下個程序被用了3次
If T <> "" Then Y(T) = Y(T) + 1
'↑如果陣列值不是空的!就令以T變數是key,item是自身累加1
'這是要記錄同個key出現了幾次
Next
Next
N1 = Application.Large(Y.items, 1)
'↑令N1變數是Y字典裡item的最大值
N2 = Application.Large(Y.items, 2)
'↑令N2變數是Y字典裡item的第二大值
For i = 1 To Y.Count
'↑設順迴圈!i從1 到Y字典key數量
If Y(Y.keys()(i - 1)) = N1 Then P1 = P1 & " " & Y.keys()(i - 1)
'↑如果以key查對應item是最大值!就令該key納入P1字串變數後方
Next
For Each V In Y.keys
'↑設逐項迴圈!令V變數是 Y字典裡的其中一個key
If Y(V) = N2 Then P2 = P2 & " " & V
'↑如果以V變數(key)查對應item是第二大值!就令該key納入P2字串變數後方
Next
MsgBox "第一多_" & N1 & "次: " & P1 & Chr(10) & _
"第二多_" & N2 & "次: " & P2
'↑跳出提示窗顯示組合字串
Set Y = Nothing: Erase Brr
'↑令釋放變數
End Sub