返回列表 上一主題 發帖

[發問] 如何抓取符合條件的對應欄位值

本帖最後由 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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題