• ベストアンサー

VLOOKUP関数をIFで条件付けしたのですが。。

シートが2枚あり1枚は名簿シートです。 別シートのセルA1に名簿シートのコード番号を入力し セルA2にVLOOKUP関数で式を下記のように入れています。 =VLOOKUP(A1,名簿!N:P,3,FALSE) このとき値がブランクになるときがあるので そのときは隣の列から数値を拾い出したいのです。 そこで =VLOOKUP(A1,名簿!N:Q,4,FALSE) だと思うのですがですが、自分でIFで式を組んだら =IF(VLOOKUP(A1,名簿!N:P,3,FALSE)="",VLOOKUP(A1,名簿!N:Q,4,FALSE),VLOOKUP(A1,名簿!N:P,3,FALSE)) となりました。 一応、希望通りの答えが返されるのですが、 もっと簡潔な組み方はあるのでしょうか?? IFでなくても何か方法があるのでしょうか?? よろしくご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

簡単かって言われると微妙なんですが、 =vlookup(A1,名簿!N:Q,4-and(len(vlookup(A1,名簿!N:Q,3,FALSE)),TRUE),FALSE) という手口もあります。「3列目の長さが0じゃなければ3列目、0なら 4列目を返せ」と、if関数を使わずに言っています。

kaihi
質問者

お礼

早速のご回答ありがとうございます。 仕事が終わってただいま家に戻ってまいりました。 上記の式を使って、希望通りの結果でした。 len関数に初めて出会いました。 早速helpで勉強してみます。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

No.2です。 >式の違いで、ブック自体の重さが変わるとか、処理速度に違いが出るということはあるのでしょうか? 今回の場合は、質問欄の数式も私や他の回答者の数式も、書き方がちょっと違うだけで、結局VLOOKUPを2回行っていることには変わりはありません。 したがって、処理速度の違いはほとんどありません(感知出来ません)。 また、ファイルの重さ(容量)については、もちろん入力する数式が短いほど軽いでしょうが、今回程度の違いではほとんど差はないと思います。 何十のシートの何万行×数百列のセルに数式を書いたりしていない限り。 (実際には確認してませんが。)

kaihi
質問者

お礼

ありがとうございます。 自分的にはこんなにたくさんの数式。。と心配してみたのですが、、お聞きできて安心しました。 また何かありましたら、よろしくお願いします。

回答No.3

こんなのでも、できそうですけど、 =VLOOKUP(A1,名簿!N:Q,3+(VLOOKUP(A1,名簿!N:P,3,FALSE)=""),FALSE) 真ん中の (VLOOKUP(A1,名簿!N:P,3,FALSE)="") がTRUEなら1を、 FALSEなら0を返すことを利用しています。

kaihi
質問者

お礼

ご回答ありがとうございます。 上記の数式で希望通りの結果でした。 またよろしくお願いします。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 No.1の方の回答をちょっと変えただけですが。 =VLOOKUP(A1,名簿!N:Q,4-SIGN(LEN(VLOOKUP(A1,名簿!N:Q,3,FALSE))),FALSE) 数式が短いことと、簡潔(簡単)であるということは、必ずしも一致しません。 この場合も、私やNo.1の方の回答は確かに短いですが、ある意味難しくなっていると言えます。

kaihi
質問者

補足

ご回答ありがとうございます。 上記の式で希望通りの結果でした。 > 数式が短いことと、簡潔(簡単)であるということは、必ずしも一致しません。 > この場合も、私やNo.1の方の回答は確かに短いですが、ある意味難しくなっていると言えます。 すみません初心者な質問なのですが、 式の違いで、ブック自体の重さが変わるとか、処理速度に違いが出るということはあるのでしょうか?(数式をほかにも使っていて、IFの式も150箇所くらい入れてます) もしそうだとしたら、どちらの数式を使ったほうが、より負荷のかかりにくいものになるのでしょうか?

関連するQ&A