私はあなたが正しい、あなたがこのような何かしたい(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 + シフトで確認しなければならない + はと入力します。
![enter image description here](https://i.stack.imgur.com/nDkXL.png)
左は検索用語と右にシート1でのワイルドカードリストと値をSheet2のです。それは単純に次の式を使用して、オートレンジに
EDIT
:
=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
あなたが(ちょうど唯一の列Bのための最後の式を使用します)(/右を下にコピーする)C1のために、この式を使用することができ、再びそれを少しスピードアップする:
=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の最初のEDIT式と列C +のEDIT 2の式を使用する場合、2番目のEDIT式は不要です。 UDF-方法については
EDIT 3
は、あなたの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
の最初の列が出力に使用されます。
=getLikeLookup($A1,Sheet2!$A:$B,COLUMN()-1)
とビット使用(まだB1で始まる)、それをスピードアップするために:
は今、たとえば、あなたは(B1で始まる)を使用することができます
=IF(A1="","",getLikeLookup($A1,Sheet2!$A:$B,COLUMN()-1))
これを2式は配列ではなく、と入力すると確認できます。を入力します。
一部のデータが役立ちます。いくつかのデータをモックアップし、元の投稿に編集オプション –