>D列の社長表示セルに【=VLOOKUP(C2,$A$2:$B$7,2)】と関数入力
>1 氏名役職C列D列
>2 愛 社長 恋 主幹 恋 入力すると主幹になる
>3 恋 課長 白 主幹
>4 山 部長 山 部長
>5 川 係長 谷 平社員
>6 谷 平社員 恋 主幹 恋 入力すると主幹になる
>7 白 主幹 愛 社長
VLOOKUP関数内の列番号の後の所で指定すべき検索方法をFALSEとする事で、
=VLOOKUP(C2,$A$2:$B$7,2,FALSE)
の様にしておられなかった事が原因です。
検索方法を省略するか、或いはTRUEにしていた場合、A列のデータを下から順番に調べて行った際に、C2に入力されている検索値以下の値が初めて現れた行の値が返されます。
B列に「主幹」と入力されている行のA列の値は「白」となっていますが、「白」という字の文字コードは18290であり、「恋」という字の文字コードである20088よりも小さいな数であるため、「白」という文字は「恋」という文字よりも小さな値として扱われます。
そして、A列に「白」と入力されている行よりも下には、「白」という文字列データよりも小さな値が入力されているセルが存在していないため、A列に「白」と入力されている7行目が、「A列のデータを下から順番に調べて行った際に、C2に入力されている『恋』という値以下の値が初めて現れた行」という事になりますので、7行目のB列の値である「主幹」が返された訳です。
尚、
=VLOOKUP(C2,$A$2:$B$7,2,FALSE)
という具合に検索方法をFALSEとしておいた場合には、他の行の値がどんな順番に並んでいるかという事には関係なく、検索値と全く同じ値が入力されている行の値が返されます。
但し、A列に検索値と全く同じ値が入力されているセルが存在しなかった場合には、エラーとなってしまいます。
その様な事を防ぐためには、回答No.2において私か示した関数の様に、IF関数やISERROR関数等と組み合わせる事で、VLOOKUP関数の結果がエラーとなる場合には何も表示させない様にする必要があります。
回答No.2において私か示した関数では、ISERROR関数の中にVLOOKUP関数を入れ子にした判定式を使う事で、VLOOKUP関数の結果がエラーとなる場合には、IF関数の処理結果が空欄となる様にしている訳です。
又、ただ単にVLOOKUP関数だけを使った場合には、VLOOKUP関数によって検索して参照した際の参照先のセルが、もし空欄のセルであった場合に空欄は返されず、数値の0が返されてしまい、参照先とは異なる結果が表示されてしまいます。
その様な事を防ぐために、回答No.2において私か示した関数では、ISERROR関数の中にVLOOKUP関数を入れ子にする際に、
ISERROR(1/(VLOOKUP(INDEX($F:$F,ROW()),$A:$B,2,FALSE)<>""))
の様にしています。
例えばVLOOKUP関数の参照先が空欄であった場合には、
VLOOKUP(INDEX($F:$F,ROW()),$A:$B,2,FALSE)<>""
という判定式の結果はFALSEになりますが、このFALSEという値は、Excel内では数値の0として扱われますので、
1/(VLOOKUP(INDEX($F:$F,ROW()),$A:$B,2,FALSE)<>"")
という部分の結果は
1/(VLOOKUP(INDEX($F:$F,ROW()),$A:$B,2,FALSE)<>"")=1/FALSE=1/0
となり、1を0で割る事になりますのでエラーとなります。
但しこの判定式はISERROR関数の中に存在しているため、ISERROR関数の判定結果はTRUEとなりますので、IF関数
IF(ISERROR(1/(VLOOKUP(INDEX($F:$F,ROW()),$A:$B,2,FALSE)<>"")),"",
の[真の場合]である""(空欄)が表示される様になっている訳です。
お礼
ありがとうございました。理由も判明しましたし、思い通りの結果表示になりました。これで報告書作成がスピーディにできます。私の【FALSE】の入力もれでした。=VLOOKUP(C2,$A$2:$B$7,2,FALSE)にしたら、【満足】した結果表示。アドバイス頂いた通りの関数式で【大満足】の結果表示になりました。関数式は奥が深くて難しいです、私もがんばりますのでまた不明点がありましたら、エクセル以外のことでも質問しますので、よろしくお願いします。