
我正在嘗試獲取產品列表並從產品名稱的開頭提取其製造商。每個產品名稱都以其製造商開頭。由於某些商品的名稱正文中有其他製造商,因此情況變得更加複雜;我需要看看該項目以什麼開頭。我正在與 50,000 多個商品和 3,000 多個製造商打交道。到目前為止我的公式是:
=LOOKUP(1,1/(FIND($C$2:$C$5,B2)),$C$2:$C$5)
這有時有效,但有時無效。例如,在下面的工作表中,第 2 行和第 3 行是正確的,但第 4 行不正確。A4
“Mike's Fun Toys”(在儲存格中)的儲存格中的結果 B4
應該是“Mike's”,但它顯示為“Fun”。
(以下是您可以複製和貼上的文字形式的資料:
+---+---------+-----------------+---------------+
| | A | B | C |
+---+---------+-----------------+---------------+
| 1 | Formula | Items | Manufacturers |
+---+---------+-----------------+---------------+
| 2 | Brown | Brown Cat Toys | Mike's |
| 3 | Cat | Cat Fun Toys | Fun |
| 4 | Fun | Mike's Fun Toys | Cat |
| 5 | | | Brown |
+---+---------+-----------------+---------------+
)
但是當我更改列(製造商)的順序時 C
:
第 4 行變得正確(「Mike 的」),但第 2 行出錯。
A 列從頭到尾都有公式。預期成績:
A2 - Brown
A3 - Cat
A4 - Mike's
無論 Column 的順序如何,如何使公式起作用 C
?
答案1
為了不理解 RyanMark 公式的讀者的利益,它是
- 尋找每個製造商名稱在給定產品名稱中的位置。這導致
1
以產品名稱開頭的製造商名稱的值(因為它出現在1st 字元),- 產品名稱中出現的其他製造商名稱的編號較高(因為它們出現較晚,位置編號較高),以及
#VALUE!
產品名稱中未出現的製造商名稱的錯誤代碼。
- 將上述每一項取反(用 1 除以它),得到
1
以產品名稱開頭的製造商名稱(這是我們要找的名稱),- 產品名稱中出現的其他製造商名稱的正數較小(因為 1 除以大於 1 的數字所得的比率小於 1),且
#VALUE!
產品名稱中未出現的製造商名稱的錯誤代碼。
- 使用
LOOKUP
來尋找1
上面的內容。
例如,對於 cell A4
(對應於 cell 中的“Mike's Fun Toys” B4
),在第一張圖像中,我們按順序得到:
1
,因為“Mike's”(C2
) 開始“Mike's Fun Toys”,8
,因為「Fun」(C3
) 出現在「Mike's Fun Toys」的第 8 個字元處,並且#VALUE!
和#VALUE!
,因為「Cat」(C4
) 和「Brown」(C5
) 沒有出現在「Mike's Fun Toys」。
將其反轉會得到1
、 0.125
( 1/8
) #VALUE!
和#VALUE!
。然後它1
在該數組中查找。這個「應該」有效,因為1
這是第一個結果,而「Mike's」是 Column 中的第一個名字 C
。
該問題可以在幫助頁面中看到LOOKUP
:
為了抬頭為了使函數正常運作,正在尋找的資料必須按升序排序。
而且顯然1
後面的0.125
不是按升序排序的。
正如LOOKUP
建議的那樣,我們可以使用 來解決這個問題MATCH
。您想要的公式使用與您的公式相同的基本方法(除了沒有反轉,這是不必要的),是
=INDEX($C$2:$C$5, MATCH(1, FIND($C$2:$C$5,$B2), 0))
第三個參數MATCH
稱為“match_type”。我已將其設為0
此處,這意味著MATCH
將查找數組中恰好為 的第一個元素1
,並且不會假設數組已排序。
這是一個陣列公式,所以輸入時必須按++ Ctrl。ShiftEnter