當前位置:成語大全網 - 新華字典 - VBA 解釋,需要應急出來壹個表格,代碼如下 需要逐行解釋代碼含義?

VBA 解釋,需要應急出來壹個表格,代碼如下 需要逐行解釋代碼含義?

Sub?test11()

''定義兩個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