アプリ版:「スタンプのみでお礼する」機能のリリースについて

例えば「F310」という検索値を、検索先の表から探したいのですが、そこでは「F31」や「F」といった短縮された文字で登録されています。
フル(4桁)で探し、無ければ3桁、それでも無ければ2桁、1桁...と、1桁ずつ減らしながら検索させる方法を教えて下さい。
また、検索先が常に検索値の左端から始まるとは限らないので、ワイルドカードを使おうと思っています。

1回だけ桁を削って検索だけなら、次のような式が作れたのですが、
=IF(ISERROR (VLOOKUP("*"&LEFT(A1,3)&"*",sheet!$A$1:$C$100,3,FALSE)),
"なし",
VLOOKUP("*"&LEFT(A1,3)&"*",sheet!$A$1:$C$100,3,FALSE)))
これを4桁→3桁→2桁→1桁 と繰り返させることが出来ません。。

ご教示お願いします。

A 回答 (3件)

必要な回数だけIF関数を繰り返せば良いと思います。



あるいは文字数の数だけ検索する関数式を並べる。
D1セルに検索する文字を入力して、D1セルの値から1文字ずつ削った文字をD2セルからD5セルで検索・・・など。
    • good
    • 0
この回答へのお礼

仰る通り、繰り返せばいいと思っていたのですが、うまく作れませんでした。
でも方向性が正しいことは理解できました。ありがとうございます。

お礼日時:2014/09/15 12:44

=IFERROR(VLOOKUP("*"&A1&"*",Sheet1!$A$1:$C$100,3,FALSE)


,IFERROR(VLOOKUP("*"&LEFT(A1,3)&"*",Sheet1!$A$1:$C$100,3,FALSE)
,IFERROR(VLOOKUP("*"&LEFT(A1,2)&"*",Sheet1!$A$1:$C$100,3,FALSE)
,IFERROR(VLOOKUP("*"&LEFT(A1,1)&"*",Sheet1!$A$1:$C$100,3,FALSE)
,"NA"))))
みたいな。
    • good
    • 0
この回答へのお礼

ありがとうございます。この数式を自分用に変えたら成功しました。どうやら自分でISERRORについて勘違いをしていたようです。これからはIFERRORを使ってみたいと思います。

お礼日時:2014/09/15 12:49

先頭から何桁目まで一致するかをチェックする場合は次の数式で良いと思います。


A列が検索値、B列とC列が検索範囲としてVLOOKUP関数を使う方法です。
A1=IF(COUNTA($A1),IFERROR(VLOOKUP(LEFT($A1,4)&"*",$B:$C,2,FALSE),IFERROR(VLOOKUP(LEFT($A1,3)&"*",$B:$C,2,FALSE),IFERROR(VLOOKUP(LEFT($A1,2)&"*",$B:$C,2,FALSE),IFERROR(VLOOKUP(LEFT($A1,1)&"*",$B:$C,2,FALSE),"")))),"")
検索値が3桁以下のときB列の文字列にA列の先頭から3桁が含まれている(桁位置浮動)ことも含める場合は検索値の先頭にワイルドカードの"*"を付加してください。
Excel 2007以降のバージョンではIFERROR関数が使えますので、これを使って入れ子構造にすると効率的になります。
1番外側のIF関数はA列に検索値の文字列が入力されていないときのチェック用です。
    • good
    • 0
この回答へのお礼

COUNTIFまでご配慮頂けてありがとうございます。仰るようにIFERRORのほうが1つカッコが減ることで分かりやすいと理解出来ました。

お礼日時:2014/09/15 12:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!