前言
工作表1 (訂單記錄): A欄: 品名 B欄: 金額 (例如:300) C欄: 區域 (例如:甲) D欄: 基本運費 (例如:50) E欄: 總金額 (這是我們要計算的)
工作表2 (免運門檻): A欄: 區域 (甲, 乙, 丙...) B欄: 免運費金額 (400, 1000, 600...)
ARRAYFORMULA(...) : 這是最外層的陣列公式宣告,讓裡面的公式能自動擴展套用到指定的範圍。IF(B2:B="", "", ...) : 這是第一層 IF,用來處理空白列。它檢查 B欄(金額)從第二列開始 (B2:B) 是否為空。如果是空的,就傳回空值 "",避免 #N/A 錯誤;如果不為空,則執行後面的主要邏輯。IF(B2:B < VLOOKUP(...), B2:B + D2:D, B2:B) : 這是核心的判斷邏輯。VLOOKUP(C2:C, '工作表2'!$A$1:$B$5, 2, 0) : 這部分是關鍵。C2:C: 我們要查詢的值是 C欄 的「區域」。 '工作表2'!$A$1:$B$5: 這是我們的查詢範圍,也就是定義免運門檻的表格。記得用 $ 鎖定範圍,以免公式下拉時跑掉 (雖然 ARRAYFORMULA 通常不需要下拉)。A1:B5 需根據你的實際表格大小調整。 2: 我們要傳回查詢範圍中的第 2 欄,也就是「免運費金額」。 0: 代表需要精確比對區域名稱。 這個 VLOOKUP 會為 C欄 的每一列找到對應的免運門檻金額。
B2:B < VLOOKUP(...) : 比較 B欄 的實際「金額」是否 小於 查到的「免運費金額」門檻。B2:B + D2:D : 如果條件成立 (金額 < 門檻),則計算「金額」加上「基本運費」。B2:B : 如果條件不成立 (金額 >= 門檻),則直接傳回「金額」(表示免運)。
範圍注意: B2:B, C2:C, D2:D 這些開放式範圍 (B2:B 指 B欄第2列到底) 會讓公式自動處理所有列。如果你只想處理固定範圍,例如到第10列,可以寫成 B2:B10, C2:C10, D2:D10。重點是所有參與計算的範圍列數要一致。
撰寫 ARRAYFORMULA 時,如果公式複雜,可以先不加 ARRAYFORMULA,針對單一列(例如第2列)寫出正確的 IF(B2 < VLOOKUP(C2, ...), B2+D2, B2) 公式。 確認單列公式無誤後,再將所有單列參照 (B2, C2, D2) 改成範圍參照 (B2:B, C2:C, D2:D 或 B2:B10, C2:C10, D2:D10),最後再包上 ARRAYFORMULA()。 用影片中提到的「剪下貼上」方式逐步建構或檢查公式,有助於釐清括號和參數是否正確。 VLOOKUP 的查詢範圍 ('工作表2'!$A$1:$B$5) 務必正確且建議鎖定。
結論
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。