- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
回復 6# Andy2483
以下是複習心得註解
Option Explicit
Sub 載入_1()
Dim Arr, Brr(1 To 14), Z, A, T$, i&, j%, q%
'↑宣告變數:(Arr,Z,A)是通用型變數,T是字串變數,(i)是長整數
'(j,q)是短整數,Brr是一維空陣列,索引號1~14
Sheets("匯總").UsedRange.Offset(4).ClearContents
'↑令"匯總"工作表中涵蓋已使用儲存格的最小方正區域儲存格範圍,
'此範圍向下偏移4列的新範圍清除內容
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z這通用型變數是 字典
For q = 1 To Sheets.Count
'↑設順迴圈!令q這短整數從1 到這活頁簿的工作表數量數
If Trim(Sheets(q).[A5]) = "" Then GoTo q01
'↑如果q迴圈數工作表的[A5]儲存格值去除頭尾空字元後的新字串是空字元,
'如果是空字元就跳到標示 q01位置繼續執行
Arr = Range(Sheets(q).[n1], Sheets(q).[a65536].End(3))
'↑令Arr這通用型變數是二維陣列,以q迴圈索引號工作表的[N1]到A欄最後有內容儲存格,
'令這儲存格範圍值帶入Arr陣列中
For i = 5 To UBound(Arr)
'↑設順迴圈!令i變數從1到 Arr陣列縱向最大索引列號
T = Trim(Arr(i, 1)) & "|" & Trim(Arr(i, 2))
'↑令T這字串變數是 以"|"符號連接i列1/2欄Arr陣列值去除頭尾空白字元的組合新字串
A = Z(T)
'↑令A這通用型變數是 以T變數查Z字典帶出來的item
If Not IsArray(A) Then
'↑如果A變數不是陣列??
A = Brr
'↑令A變數是 同Brr陣列大小的一維空陣列
A(1) = Trim(Arr(i, 1)): A(2) = Trim(Arr(i, 2))
'↑令A陣列1索引號陣列值是 i迴圈列1欄Arr陣列值,去除頭尾空白字元的新字串
'↑令A陣列2索引號陣列值是 i迴圈列2欄Arr陣列值,去除頭尾空白字元的新字串
End If
For j = 3 To UBound(Arr, 2)
'↑設順迴圈!令j變數從3到 Arr陣列橫向最大索引欄號數
A(j) = A(j) + Val(Arr(i, j))
'↑令A陣列j迴圈數索引號陣列值是 累加i迴圈列j迴圈欄Arr陣列值轉化成的數值
Next
Z(T) = A
'↑令T變數key以 新的A陣列放回Z字典中
Next
q01: Next
'------------------------------
With Sheets("匯總").[A5].Resize(Z.Count, 14)
'↑以下是關於"匯總"工作表的[A5]擴展向下Z字典key數列,擴展向右14欄範圍儲存格,
'關於此範圍儲存格程序
.Value = Application.Transpose(Application.Transpose(Z.Items))
'↑令該範圍儲存格值以Z字典item轉置兩次的陣列值帶入
.Sort KEY1:=.Item(1), Order1:=1, KEY2:=.Item(2), Order1:=1, Header:=2
'↑令該範圍儲存格做2層次無標題列的正排序,第1層是第1欄,第2層是第2欄
.Columns(7) = "=rank(F5," & .Columns(6).Address(1, 1) & ")"
'↑令第7欄值是 第6欄的排名公式
.Columns(14) = "=rank(M5," & .Columns(13).Address(1, 1) & ")"
'↑令第14欄值是 第13欄的排名公式
End With
End Sub |
|