• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで氏名,役職作成。氏名入力で役職表示)

エクセルで氏名役職作成方法

このQ&Aのポイント
  • エクセルで氏名と役職を関連付ける方法について教えてください。
  • 任意なセルに氏名を入力すると、右隣りのセルに対応する役職を表示する方法を教えてください。
  • 関数式を使用して氏名と役職を関連付ける方法について教えてください。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>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)<>"")),"", の[真の場合]である""(空欄)が表示される様になっている訳です。

syunburunn
質問者

お礼

ありがとうございました。理由も判明しましたし、思い通りの結果表示になりました。これで報告書作成がスピーディにできます。私の【FALSE】の入力もれでした。=VLOOKUP(C2,$A$2:$B$7,2,FALSE)にしたら、【満足】した結果表示。アドバイス頂いた通りの関数式で【大満足】の結果表示になりました。関数式は奥が深くて難しいです、私もがんばりますのでまた不明点がありましたら、エクセル以外のことでも質問しますので、よろしくお願いします。

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 まずG列のセルに次の関数を入力して下さい。 =IF(INDEX($F:$F,ROW())="","",IF(ISERROR(1/(VLOOKUP(INDEX($F:$F,ROW()),$A:$B,2,FALSE)<>"")),"",VLOOKUP(INDEX($F:$F,ROW()),$A:$B,2,FALSE)))  次に、そのセルをコピーして、G列のセルの中で役職を表示させなければならなくなる可能性のある全てのセル(表の中のG列のセル)に貼り付けて下さい。  以上です。

syunburunn
質問者

お礼

ありがとうございました。早速実行しました、手打ちで入力したらうまくいかずエラー多発でしたがやっと入力が、ちゃんとできました。

  • kuma56
  • ベストアンサー率31% (1423/4527)
回答No.1
syunburunn
質問者

お礼

【お礼する】早速実行しました。大変助かりました。 【お礼する】でまたアドバイスを頂くのは失礼でございますが アドバイスをお願いします。 エクセルは2010です。 D列の社長表示セルに【=VLOOKUP(C2,$A$2:$B$7,2)】と関数入力  セルD3で課長表示出ず。 1 氏名 役職 C列 D列 2 愛 社長 愛 社長 3 恋 課長 恋 主幹 4 山 部長 山 部長 5 川 係長 川 係長 6 谷 平社員 谷 平社員 7 白 主幹 白 主幹 1 氏名 役職 C列 D列 2 愛 社長 恋 主幹 恋 入力すると主幹になる 3 恋 課長 白 主幹 4 山 部長 山 部長 5 川 係長 谷 平社員 6 谷 平社員 恋 主幹  恋 入力すると主幹になる   7 白 主幹 愛 社長 私には改善方法がわかりません。どうか教えて下さい。

関連するQ&A