Option Explicit
Sub TEST()
Dim Arr, Brr, Crr, Z, i&, j%, R
'↑宣告變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
R = Application.Match("小計", [A:A], 0)
'↑令R變數是 表格函數Match()的回傳值
If IsError(R) Then Exit Sub Else R = R - 1
'↑如果R變數是錯誤值? True就結束程式執行,否則令R-1
Brr = Range([AS5], [AN65536].End(3))
'↑令Brr變數是 盛裝資料格值的二維陣列
Crr = Range([A1], Cells(R, "AH"))
'↑令Crr變數是 盛裝整個結果格值的二維陣列
ReDim Arr(4 To R, 4 To UBound(Crr, 2))
'↑令Arr變數是結果目標格範圍的空陣列
For i = 4 To R
'↑設順迴圈!i從4到 R變數
If Trim(Crr(i, 3)) <> "" Then Z(Trim(Crr(i, 3))) = i
'↑如果i迴圈列/姓名欄Crr陣列值不是空的?
'True就令姓名為key,item是列號納入Z字典中
Next
For i = 1 To UBound(Brr)
'↑設順迴圈!i從1到 Brr陣列縱向最大索引號列(迴圈跑資料陣列)
If Z(Trim(Brr(i, 1)) & "") = 0 Then GoTo i02
'↑如果資料陣列i迴圈列/姓名欄是空的就 跳到標示i02位置繼續執行
For j = Val(Brr(i, 2)) + 3 To Val(Brr(i, 4)) + 3
Arr(Z(Trim(Brr(i, 1)) & ""), j) = Brr(i, 6)
Next
'↑設順迴圈將代碼填入結果目標陣列中
i02: Next
[D4].Resize(UBound(Arr) - 3, UBound(Arr, 2) - 3) = Arr
'↑令結果目標格填入Arr陣列值
End Sub