2017-07-03 64 views
2

我有大約30個數字是1,2或3位數是代碼。這些代碼附加在其他號碼的前面。我想知道一個號碼前面是什麼代碼,例如對於號碼35467036,前兩位數字與代碼35匹配。所以我希望輸出爲1.5檢查一個,兩個或三個數字在VLOOKUP

這是我目前的設置,我有一張表,其中包含所有代碼,後面跟着下一列中的輸出。如果所有的代碼都是三位數字,我可以做這個=VLOOKUP((LEFT(E6,3)&"*"),D1:E3,2,FALSE),但不幸的是他們不是。

我也試過使用嵌套的IF語句,但我只能走7個級別。

這隻有在VBS中才有可能或者有其他方法嗎?

編輯:Code and Numbers

代碼列的格式爲文本。如果我將值3輸入到左側,則它不適用於兩位數字。無論如何,我可以讓它適用於1,2和3位數字代碼?代碼也不重疊,例如代碼表中不會有96和965。

+0

是其他數字而使代碼部分預留固定長度的或可變長度即數字的數量。 – skkakkar

+0

@skkakkar沒有代碼的數字在長度上是不一樣的。 – PeskyPotato

回答

2

七個嵌套的IF作爲Excel的一個非常舊版本的極限點。您可能需要考慮升級到本世紀仍支持的版本。

但是,您的主要問題是您的查找的數據類型是文本,因爲您將字符串與通配符連接起來。而您的查找表的第一列可能由數字組成。

爲了解決這個問題,您需要在您的查找表中添加一個Text列作爲文本值來表示數值。

如果您想使用Vlookup,那麼該幫助列將需要成爲查找範圍的第一列。

可以使用索引/匹配代替VLOOKUP是獨立列的順序的,因爲這屏幕截圖顯示:

enter image description here

列H示出了已經在列G.

被應用於式

編輯:

根據您發佈的屏幕截圖,您想從列E到F的表中查找,並且此表僅包含短代碼。因此,將通配符添加到查找值是沒有意義的。您只需提取您想要用於查找的值。

如果你只想查找兩位數字,那麼你只需要提取兩位數字。添加通配符不會刪除第三個數字。

在下面的截圖中,輔助列向LEFT()函數提供了要提取的字符數,然後在VLookup中使用該值。

=VLOOKUP(LEFT(A1,B1),$E$1:$F$5,2,FALSE) 

enter image description here

+0

謝謝你的迴應,我曾嘗試使用INDEX,但它只會使用3位數字代碼。無論如何,我可以適應1和2嗎?我在問題中添加了更多信息的屏幕截圖。 – PeskyPotato

+0

查看完截圖後,我用另一個建議編輯了我的答案。 – teylyn

+0

我認爲這將是這種情況,我將不得不改變我的工作流程以獲得幫手列,但它將不得不做。感謝您的幫助,我真的很感激! – PeskyPotato

1
=INDEX($G$2:$G$5, 
SMALL(
IF(LEFT(A1,3)*1=$F$2:$F$5,ROW($G$2:$G$5)-1, 
IF(LEFT(A1,2)*1=$F$2:$F$5,ROW($G$2:$G$5)-1, 
IF(LEFT(A1,1)*1=$F$2:$F$5,ROW($G$2:$G$5)-1))),1)) 

=INDEX(LookupValues,Small(ArrayOfRowsFromIfStatements,FirstRow))

這是一個數組公式,所以你需要使用按Ctrl ++輸入仍然在公式欄中。

我們使用If來構建條件匹配的Row數組的數組,否則返回FALSE。小函數然後返回數組中最小的結果,這是條件匹配的第一行。

然後,我們對返回該行號的結果進行索引(從行中扣除-1以抵消標頭)。

enter image description here

1

如果你在A列數字總是6位數字+代碼長度,你可以使用這個:

=VLOOKUP(--LEFT(A1,LEN(A1)-6),E2:F5,2,FALSE) 

enter image description here

相關問題