如果我得到了你的權利,你想是這樣的(在B1,然後複製下來):
=IF(MIN(IFERROR(MATCH(Sheet2!$A$1:$A$100,A1,0)*ROW($1:$100),FALSE)),INDEX(Sheet2!B:B,MIN(IFERROR(MATCH(Sheet2!$A$1:$A$100,A1,0)*ROW($1:$100),FALSE))),"")
這是一個數組公式,必須以CTRL + 移來證實 + 輸入。
左是片1與查找術語和右與通配符列表和值SHEET2。
編輯
要自動量程它只是使用這個公式:
=IF(MIN(IFERROR(MATCH(Sheet2!$A$1:INDEX(Sheet2!A:A,MATCH("zzz",Sheet2!A:A)),A1,0)*ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A))),FALSE)),INDEX(Sheet2!B:B,MIN(IFERROR(MATCH(Sheet2!$A$1:INDEX(Sheet2!A:A,MATCH("zzz",Sheet2!A:A)),A1,0)*ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A))),FALSE))),"")
是的,只有第一個值將被輸出......如果你想獲得多個值,你可以使用這個公式(如總是B1,然後複製下來,這個時候也到左):
*² =IFERROR(IF(SMALL(IFERROR(MATCH(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A)),$A1,0)*ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A))),FALSE),COLUMN()-1),INDEX(Sheet2!$B:$B,SMALL(IFERROR(MATCH(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A)),$A1,0)*ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A))),FALSE),COLUMN()-1)),""),"")
但是請記住,所有的公式將您的Excel減慢更多的細胞使用他們(最後一個)。如果你的名單很長,我建議一個UDF。
EDIT 2
要再次加快了一點了,你可以用這個公式C1(抄下/右)(只需使用最後一個公式僅列B):
=IF(B1="","",IFERROR(IF(SMALL(IFERROR(MATCH(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A)),$A1,0)*ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A))),FALSE),COLUMN()-1),INDEX(Sheet2!$B:$B,SMALL(IFERROR(MATCH(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A)),$A1,0)*ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A,MATCH("zzz",Sheet2!$A:$A))),FALSE),COLUMN()-1)),""),""))
另外請記住,所有的公式都是數列公式;)
*²如果使用列B的第一個編輯公式和列C +的編輯2公式,則不需要第二個編輯公式。
編輯3
對於UDF路去你的VBA編輯器(打ALT + F11 ),並有 「插入」 - > 「模塊」。然後把在代碼窗口此模塊:
Option Explicit
Public Function getLikeLookup(str As String, rng As Range, Optional nCou As Long, Optional outCol As Range) As String
'for not case sensitive
str = LCase(str)
'set ranges
If nCou < 1 Then nCou = 1
If outCol Is Nothing Then Set outCol = rng.Offset(, rng.Columns.Count - 1).Resize(, 1)
Set rng = Intersect(rng.Resize(, 1), rng.Parent.UsedRange.EntireRow)
Set outCol = Intersect(outCol.Resize(, 1), outCol.Parent.UsedRange.EntireRow)
'get check-array (will be faster than running the sheet directly)
Dim inArr As Variant
inArr = rng.Value
'run checks
Dim i As Long
For i = 1 To UBound(inArr)
'If str Like inArr(i, 1) Then nCou = nCou - 1
If str Like LCase(inArr(i, 1)) Then nCou = nCou - 1 'for not case sensitive
If nCou = 0 Then Exit For
Next
'check for valid output
If i > UBound(inArr) Or i > outCol.Rows.Count Then Exit Function
'set output
getLikeLookup = outCol.Offset(i - 1).Resize(1, 1).Value
End Function
現在你可以使用你的UDF像其他工作表函數。詳細解釋這一點。
getLikeLookup(lookup_string,lookup_range,[#_occurrence,[output_range]])
lookup_string
:要檢查對字符串(整個字符串,不佔位工作)
lookup_range
:在此範圍內的最左邊的列將被檢查爲像lookup_string
。如果output_range
被省略,則lookup_range
中最右邊的列將用於輸出。
#_occurrence
:[可選]表示哪個匹配輸出。如果省略(比如1)將會被挑選出來。
output_range
:[可選] output_range
中的第一列將用於輸出。
現在的例子中,你可以使用(在B1開始):
=getLikeLookup($A1,Sheet2!$A:$B,COLUMN()-1)
,並加速它一點使用(在B1仍然開始):
=IF(A1="","",getLikeLookup($A1,Sheet2!$A:$B,COLUMN()-1))
這2公式不是陣列,只需擊中即可確認輸入。
有些數據會有所幫助。請模擬一些數據,並使用編輯選項 –