- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
7#
發表於 2023-12-1 08:15
| 只看該作者
本帖最後由 Andy2483 於 2023-12-1 16:21 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Brr, Crr, v, Z, i&, j, C, T$
'↑宣告變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是字典
C = Application.Match("交貨日期", [3:3], 0)
'↑令C變數是執行表格函數 Match()的回傳值 (第3列裡找 儲存格值是 "交貨日期")
If IsError(C) Then Exit Sub
'↑如果C變數是錯誤值 (Match()找不到符合的儲存格!會回傳錯誤值)
'所以C變數必須宣告為通用型變數
Brr = Range(Cells(1, C), [A65536].End(xlUp))
'↑令Brr變數是裝入儲存格值的二維陣列
For j = 1 To C
'↑設順迴圈!j從1 到C變數
T = T & Trim(Brr(2, j))
'↑令T變數是連接 迴圈列2欄陣列值去除前後空白字元後的新字串
If Trim(Brr(3, j)) = "缺額" Then Z(j) = T: T = ""
'↑如果迴圈列2欄陣列值去除前後空白字元後的新字串是 "缺額"?,
'True就令j變數為Key,Item是 T變數,納入Z字典裡,然後T變數清空
Next
For i = 4 To UBound(Brr)
'↑設順迴圈!i從4到Brr陣列縱向最大索引列號
Brr(i - 3, 1) = ""
'↑令陣列裡的1欄相對位置列陣列值是空字元
For Each j In Z.KEYS
'↑設逐項迴圈!令j變數是 Z字典裡的Keys之一
If Val(Brr(i, j)) < 0 Then Brr(i - 3, 1) = Z(j): Exit For
'↑如果迴圈列缺額欄裡的數值小於0?
'True就令陣列裡的1欄相對位置列陣列值是 j變數查Z字典回傳值
Next
Next
Cells(4, C).Resize(UBound(Brr) - 2, 1) = Brr
'↑令結果位置儲存格範圍寫入Brr陣列值
End Sub |
|