我有一個包含數千行的工作表,其中包含唯一的 IDA
和 3 個不同的錯誤代碼M
。每個 ID 可能有 1 個、2 個或 3 個錯誤。它們將始終處於相同的順序。
我已經手動輸入了N
所需的輸出。我在列中寫了一個像這樣的公式O, P, Q
以及錯誤文字:
=IF(IFERROR(SEARCH("Brand is not valid", M42), "") <> "", "Brand", "")
我嘗試過類似的方法,R
但由於顯而易見的原因,它無法正常工作。有沒有辦法做到這一點,R
看起來像這樣N
?
=CONCATENATE(O42,"/", P42,"/",Q42)
如果用Excel公式不行的話,有沒有VBA的方法?
答案1
好吧,有點讓人頭疼,但我已經明白了:
列O
, P
&Q
如您所擁有的那樣,標題為Brand
, Product
& OEM
。將整個內容變成帶有Ctrl-的表格T(不是必需的,但很方便,我的專欄R
依賴於它,但如果需要,您可以使用列引用)
柱子R
:
=IF(LEN([Brand])>0,[Brand],IF(LEN([Product])>0,[Product],IF(LEN([OEM])>0,[OEM],"")))
柱子S
:
=IF(A2=A4,F2&"/"&F3&"/"&F4,IF(A2=A1,"",IF(A2=A3,F2&"/"&F3,F2)))
不幸的是,似乎使用表引用到不同行的唯一方法是使用Offset
,因此為了保持簡單,我回到單元格引用。這有點否定了將整個東西變成桌子的酷/方便因素,但是,無論如何...
而且......這是它的樣子的圖片:
答案2
我將從優化您的O
、P
和Q
公式開始。您目前有
=IF(IFERROR(SEARCH("Brand is not valid", M42), "") <> "", "Brand", "")
IFERROR
是一個很棒的函數,用於顯示可能是錯誤代碼的計算值的清理版本;我經常使用它,並在超級用戶的答案中推薦它。你可能知道,
IFERROR(calculated_value, default_value)
是縮寫
IF(ISERROR(calculated_value), default_value, calculated_value)
但用於IFERROR
創建某些值的淨化版本
然後測試該值以有條件地執行某些操作
是一種不必要的尷尬的使用方式IFERROR
。上式可以簡化為
=IF(ISERROR(SEARCH("Brand is not valid", M42)), "", "Brand")
而且,我相信你知道,SEARCH("Brand is not valid", M42)
測試看看是否M42
包含 Brand is not valid
。但是,只要 ColumnM
只能包含三個錯誤字串,就可以縮短為
=IF(ISERROR(SEARCH("Brand", M42)), "", "Brand")
或簡化為
=IF(M42 = "Brand is not valid", "Brand", "")
好的,現在我將使O
、P
和Q
公式變得更複雜一些:
O42
→=IF($A42=$A41, O41, "") & IF(ISERROR(SEARCH("Brand", $M42)), "", "Brand")
P42
→=IF($A42=$A41, P41, "") & IF(ISERROR(SEARCH("Product", $M42)), "", "Product")
Q42
→=IF($A42=$A41, Q41, "") & IF(ISERROR(SEARCH("OEM", $M42)), "", "OEM")
公式O42
表示,
如果這是此 ID(列
A
)的第二行或第三行,請查看該 ID 上方的儲存格(即O
前一行的列儲存格),看看我們是否已經確定該東西具有無效品牌。另外,請查看M
該行的 Column 以查看它是否為Brand is not valid
。然後連接結果。
由於唯一 ID 永遠不會出現兩次出現相同錯誤的情況(對嗎?),因此這兩個子結果永遠不會都非空,因此這本質上是在執行“OR”操作:
Brand
如果此行或此 ID 的前一行包含無效品牌錯誤,則顯示值。
O
這具有將每個 ID 的、P
和Q
值向下拖曳到最後一行的效果:
請注意,第 41、44、47 和 49 行分別顯示了適用於 Columns O
、P
、 和中各自 ID 的所有錯誤的簡寫形式Q
。
我以R
與您相同的方式定義了列。看產生以逗號分隔的儲存格內容列表,不包括空格
了解消除不需要的斜線的技術。
如果僅在第 41、44、47 和 49 行中進行所需的串聯就足夠了,那麼您就完成了。否則,定義N42
為
=IF($A22=$A23, N23, R22)
或者
=IF($A22<>$A23, R22, N23)
O
這與我在 Columns 、P
和中使用的技巧幾乎完全相同Q
,但方向相反:
如果這是該 ID 的最後一行(即,如果這是行 41、44、47 或 49),則使用該行中的值的串聯(這是該 ID 的錯誤代碼的完整集合)。否則,請查看該單元格下方的單元格(即
N
下一行的列單元格),其中將包含正確的答案。
換句話說,所需的值會滲透到每個 ID 的第一行。