
答案1
下面是 5 個公式的級數。每個公式都基於其前面的公式。希望這樣的進展能讓後面的內容更容易理解。
[ 公式 1 / 5 ] 基礎公式
=IFERROR(IF(
MATCH(A2:A7,FILTER(A2:A7,B2:B7="Wash car"),0),
"yes"),"no")
- 如果功能用途匹配就像它一樣
logical_test
。 - 這如果函數的
value_if_true
參數是"Yes"
value_if_false
被省略,因為logical_test
使用的只能返回TRUE
或#N/A
- 錯誤將錯誤替換為
"No"
[公式 2 of 5 ] 忽略空白行
=IF(A2:A7<>0, IFERROR(IF(
MATCH(A2:A7,FILTER(A2:A7,B2:B7="Wash car"),0),
"Yes"),"No"),"")
- 若要忽略空白行,如果函數被加
value<>0
為它的logical_test
。它將返回:TRUE
對於包含非零數字的任何單元格以及任何文字字串,甚至包含數字的單元格。例如。("0"<>0)=TRUE
FALSE
對於數字0
以及 Excel 強制為零的空白儲存格。例如。如果OR(ISBLANK(A1),A1=0)
那麼(A1<>0)=FALSE
- 這基本公式被用作
value_if_true
value_if_false
是一個空字串""
。
此方法會跳過返回,"No"
同時防止資料間隙中的行偏移。
[ 公式 3 / 5 ] 標題行公式
將公式移至標題行可能會防止其被覆蓋。
=VSTACK("Wash on Order?",
IF(A2:A7<>0, IFERROR(IF(
MATCH(A2:A7,FILTER(A2:A7,B2:B7="Wash car"),0),
"Yes"),"No"),""))
- 堆疊允許垂直堆疊數組
- 第一個使用的陣列是標題
"Wash on Order?"
- 第二個陣列是前面的公式。
[ 公式 4 of 5 ] 新增了 LET 函數
儘管讓單獨使用不會對前面的公式添加很多內容,在這一步中應用它是為了澄清轉換。隨著公式越來越複雜,讓變得更加清晰。
=LET(rng,A2:B7,
a,DROP(rng,,-1), b,DROP(rng,,1),
VSTACK("Wash on Order?",
IF(a<>0, IFERROR(IF(
MATCH(a, FILTER(a, b="Wash car"), 0),
"Yes"), "No"), "")))
- 這讓函數允許將值和公式儲存在變數中以供重用。這可以減少程式碼重複和公式長度,還可以使複雜的公式更易於理解和管理。
- 源範圍儲存在
rng
. - A 列
a
和 B 列b
回傳使用降低調度不必要的列。 a
現在在公式中b
使用 和 代替和A2:A7
。B2:B7
[ 公式 5 of 5 ] 自動調整範圍大小
允許資料增長而無需修改公式。接受完整列,然後根據填充的資料根據需要調整數組大小。的價值讓正在全面展示。
=LET(rng,A:B,
arr,DROP(FILTER(rng, ROW(rng)<=
MAX((rng<>0)*(ROW(rng)))),1),
a,DROP(arr,,-1), b,DROP(arr,,1),
VSTACK("Wash on Order?",
IF(a<>0, IFERROR(IF(MATCH(a,
FILTER(a, b="Wash car"), 0),
"yes"),"no"),"")))
答案2
以下解決方案似乎滿足範例資料中規定的目標。
在空白列中
C
,將A
每行的B
列與=concat(A2,B2)
(在儲存格中C2
)連接起來。在空白列中
D
,從 開始新增下列公式D2
。這是一個數組公式,因此您需要CTRL+SHIFT+ENTER
同時按下才能使其發揮作用。=IF(OR($A$1:$A$6=A1)*(OR($C$1:$C$6=CONCAT(A1,"Wash car"))),"Yes","No")
複製
D2
到其餘行。
如果我忽略了某些事情(我覺得我可能正在做,因為我的樣本資料集非常有限),請告訴我,我會盡力糾正它。如果此解決方案最終解決了您的問題,請將其標記為答案。