''定義兩個Integer變量
Dim?r%,?i%
''定義兩個Variant變量
Dim?arr,?brr
''定義壹個“工作表”對象變量
Dim?ws?As?Worksheet
''定義壹個Object對象變量
Dim?d?As?Object
''通過VBS的方法創建壹個字典對象,這個方法不好,建議在“工具”》“引用”中添加
''Microsoft?Scripting?Runtime部件,然後就可以進行強類型編碼,比如
''Dim?d?As?New?Scripting.Dictionary
Set?d?=?CreateObject("scripting.dictionary")
''遍歷本工作簿中的所有工作表
For?Each?ws?In?Worksheets
''如果工作表的標簽名是“匯總表”
If?ws.Name?<>?"匯總表"?Then
''鎖定當前工作表對象ws變量,對其進行短名操作
With?ws
''取得ws工作表的最下面行的行序號
r?=?.Cells(.Rows.Count,?2).End(xlUp).Row
''將“A2:D最大已用行號”區域內的所有單元格賦值給arr變量,
''arr被賦值後,是壹個包含這個區域內所有單元格值的數組
arr?=?.Range("a2:d"?&?r)
''遍歷這個數組
For?i?=?1?To?UBound(arr)
''檢查第i行第壹列的單元格的值是否不為空
If?Len(arr(i,?1))?<>?0?Then
''如果不為空,就將它賦值給sbm變量,這裏沒有顯式聲明,註意
sbm?=?arr(i,?1)
End?If
''檢查字典中是否不存在第i行第2列的單元格的值
If?Not?d.Exists(arr(i,?2))?Then
''重定義brr為壹個索引號為1-3的動態數組
ReDim?brr(1?To?3)
''將第i行第2列的單元格值保存在brr數組第壹個元素中
brr(1)?=?arr(i,?2)
''將第i行第4列的值連接到brr數組的第二個元素中
brr(2)?=?brr(2)?+?arr(i,?4)
''將上面的sbm的值即第i行第1列的單元格的值保存在brr數組的第3個元素中
brr(3)?=?sbm
Else
''如果第i行第2列單元格的值在字典中已經存在,執行如下邏輯
''將字典中鍵為第i行第2列單元格值的項的值賦值給brr變量
brr?=?d(arr(i,?2))
''將第i行第4列的值連接到brr數組的第二個元素中
brr(2)?=?brr(2)?+?arr(i,?4)
''將上面的sbm的值即第i行第1列的單元格的值連接到brr數組的第3個元素的後面
brr(3)?=?brr(3)?&?vbLf?&?sbm
End?If
''將第i行第2列的鍵的項值設置為brr變量
d(arr(i,?2))?=?brr
Next
End?With
End?If
Next
''鎖定“匯總表”工作表,進入短名編碼模式
With?Worksheets("匯總表")
''清空“匯總表”所有已經存在值的區域
.UsedRange.Offset(1,?0).Clear
''將字典d中的項轉置後,賦值給由“A2”單元格擴展行數為字典d項數,列數為3的“匯總表”的單元格區域
.Range("a2").Resize(d.Count,?3)?=?Application.Transpose(Application.Transpose(d.Items))
End?With
End?Sub