派出所調查案件,需從多名嫌疑人通話記錄中找出「被至少兩名嫌疑人共同撥打的號碼」及各人撥打次數。資料量大、結構雜,一般函數/樞紐表無法處理,需用 VBA 陣列與字典演算法高效完成。本文提供完整邏輯分析與可直接使用的 VBA 程式碼。


Private Sub CommandButton1_Click()
' 初始化結果表
Sheets(2).Rows("2:65536").ClearContents
Sheets(2).Columns("B:IV").ClearContents
Dim Ls As Long, i As Long, j As Long, Isa As Boolean, k As Long, yhs As Long
Isa = False
i = 2
' 1. 蒐集嫌疑人代號
If Sheets(1).Cells(1, 2) = "" Then
MsgBox "沒有用戶,無法統計!", vbCritical, "錯誤"
Exit Sub
Else
Do While Sheets(1).Cells(1, i) <> ""
Sheets(2).Cells(1, i) = Sheets(1).Cells(1, i)
i = i + 1
Loop
yhs = i - 1 ' 嫌疑人數
End If
' 2. 建立唯一號碼清單
Ls = 2
Do While Sheets(1).Cells(1, Ls) <> ""
i = 2
Do While Sheets(1).Cells(i, Ls) <> ""
If Sheets(2).Cells(2, 1) = "" Then
Sheets(2).Cells(2, 1) = Sheets(1).Cells(i, Ls)
Else
j = 2: Isa = False
Do While Sheets(2).Cells(j, 1) <> ""
If Sheets(2).Cells(j, 1) = Sheets(1).Cells(i, Ls) Then Isa = True: Exit Do
j = j + 1
Loop
If Not Isa Then Sheets(2).Cells(j, 1) = Sheets(1).Cells(i, Ls)
End If
i = i + 1
Loop
Ls = Ls + 1
Loop
' 3. 統計各人次數
Ls = 2
Do While Sheets(2).Cells(1, Ls) <> ""
i = 2
Do While Sheets(2).Cells(i, 1) <> ""
j = 2: k = 0
Do While Sheets(1).Cells(j, Ls) <> ""
If Sheets(2).Cells(i, 1) = Sheets(1).Cells(j, Ls) Then k = k + 1
j = j + 1
Loop
If k <> 0 Then Sheets(2).Cells(i, Ls) = k
i = i + 1
Loop
Ls = Ls + 1
Loop
' 4. 刪除僅 1 人撥打的號碼列
i = 2
Do While Sheets(2).Cells(i, 1) <> ""
j = 2: k = 0
Do While j <= yhs
If Sheets(2).Cells(i, j) <> "" Then k = k + 1
j = j + 1
Loop
If CInt(k) < 2 Then
Sheets(2).Rows(i).Delete Shift:=xlUp
Else
i = i + 1
End If
Loop
MsgBox "統計完畢!", vbInformation, "系統提示"
Sheets(2).Select
End Sub
Scripting.Dictionary 替代雙重迴圈,速度提升百倍。UsedRange 或 ListObject 動態判斷範圍。VBA 賦予 Excel 處理複雜關聯分析的能力,讓調查人員從海量通話記錄中快速鎖定關鍵線索。