Board logo

標題: [發問] 如何抓取符合條件的對應欄位值 [打印本頁]

作者: chi830    時間: 2021-3-19 13:09     標題: 如何抓取符合條件的對應欄位值

請教各位先進~
現有一份庫存與訂單統計的需求表,
我想讓「交貨日期」的欄位,能夠從「缺額」欄位,由左至右搜尋到的第一筆負數,自動帶出來所對應的交貨日期

原本是採用IF的公式,但因為欄位會愈來愈多,覺的這個方式非常不OK
不知先進們 是否能指點指教有沒有更簡易的作法,謝謝您們~

![attach]33141[/attach]
作者: 准提部林    時間: 2021-3-21 18:31

陣列公式:
=iferror(INDEX(SUBTOTAL(4,OFFSET(B$2,,,,COLUMN(A:O))),MATCH(1,(C4:P4<0)*(C$3:P$3="缺額"),)),"")
作者: chi830    時間: 2021-3-21 20:14

回復 2# 准提部林


   謝謝先進~
   真的太神奇了,一段陣列公式就解決了~
   我得好好消化一下了....
   非常的感謝~您
作者: hcm19522    時間: 2021-3-22 17:34

https://blog.xuite.net/hcm19522/twblog/589673822
作者: chi830    時間: 2021-3-23 09:28

回復 4# hcm19522


    謝謝大大~
    又多學到一種方式了~
作者: hcm19522    時間: 2021-3-23 14:27

回復 5# chi830



    2樓 "准大師" 是大師中的大師  此方式曾請教於他
作者: Andy2483    時間: 2023-12-1 08:15

本帖最後由 Andy2483 於 2023-12-1 16:21 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:
[attach]37089[/attach]

執行結果:
[attach]37090[/attach]

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




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)