プロが教えるわが家の防犯対策術!

https://oshiete.goo.ne.jp/qa/717333.html
ここで質問されてる様にしたいのですが、どうしても出来ません。

質問内容
入力規則を使って、社員コードを入力する際に
10001 山田太郎
10002 鈴木花子
10003 佐藤大介
のように、ドロップダウンリストに「社員コード」「社員名」と2列表示させたいのです。
そして、例えば山田太郎を選択すると、セルには「10001」だけが入力されるようにしたいのですが・・・

解答内容
番号のデータがA2からA4、社員名がB2からB4にあるとし
C1にリストを設定して番号を入れ、D1に社員名が反映するようにするときにはD1に
=INDEX(A2:A4,MATCH(C1,B2:B4))
と入れてやるとうまくいくと思います。

つまり
   A    B      C      D
10001  山田太郎 DDリスト表示  =indexの式

しかしCにリスト設定しても AとBは分割されてるのでAしか設定出来ませんよね?
目的はCで「ドロップダウンリストに「社員コード」「社員名」と2列表示」にしたいのに
これでは駄目なのでは?
それとも出来てて私の理解がおかしいのでしょうか?
再度の解説をお願いしたいのですが、よろしくお願いします。

質問者からの補足コメント

  • 解答ありがとうございます
    すいません言い忘れていましたが、C列でVLOOKUPによりAのコードに対するB社員名をを検索するようにしてます。そのとき、コードだけが表示されますがコードに社員名も一緒に表示させたいのです。
    よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/06/04 06:22
  • すいません、勘違いしてました。
    DにはVLOOKUP関数でCに入力したコートから社員名を持ってくるようにしてます。
    Cにドロップダウン表示でAとBの表示させて、実際にCに入力確定するときに関数か何かで
    左側のコードだけを入力するように出来ないでしょうか?
    よろしくお願いします。

      補足日時:2015/06/04 09:37
  • あ、すいません違いました。
    入力規制で複数指定出来ないのですから例えばAに「コード 社員名」として
    BにドロップダウンリストでA「コード 社員名」を表示、入力されるのは左のコードだけでCにはVLOOOKUPで社員名を持ってくる。
    こんな感じになるでしょうか?

    何度もすいません。よろしくお願いします。

      補足日時:2015/06/04 09:42
  • すいません、出来ました。
    大変大変、ありがとうございました。

    No.5の回答に寄せられた補足コメントです。 補足日時:2015/06/05 11:33

A 回答 (5件)

#2です。


社員コードは文字列扱いなのですか?それだと、示した回答ではVlookupできないはずなので、頭に「0」がつくものだけ文字列にしているのでしょうか。
それなら、全て文字列扱いにして、LEFT(C2,5)*1をLEFT(C2,5)にすれば、エラーは出ないと思います。
文字列扱いしているものと数字扱いのものを混在したままにしたいなら、
=IFERROR(VLOOKUP(LEFT(C2,5),$A$2:$B$4,2,FALSE),VLOOKUP(LEFT(C2,5)*1,$A$2:$B$4,2,FALSE))
これでどうでしょうか。
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速の回答、大変、ありがとうございます。
社員コードは数字と文字列混在してますので、0が頭にくると0が表示されないのでその分だけは
'を付けて「’00123」と言う風にしてます。

LEFT(C2,5)*1をLEFT(C2,5)とすればいけるのですが、
=IFERROR(VLOOKUP(LEFT(C2,5),$A$2:$B$4,2,FALSE),VLOOKUP(LEFT(C2,5)*1,$A$2:$B$4,2,FALSE))だと入らないみたいなのですが?

式もあってるみたいですし、IFERRORを外して
=VLOOKUP(LEFT(C2,5),$A$2:$B$4,2,FALSE),VLOOKUP(LEFT(C2,5)*1,$A$2:$B$4,2,FALSE)としても、入りません。
よろしくお願います。

お礼日時:2015/06/05 11:20

案1


1) C2セルに =A2&" "&B2
下へオートフィル

2) E2セルに入力規則 リスト
例) =$C$2:$C$5

3) F2,G2セルを選択して
=IF(E2="","",INDEX(A:B,MATCH(E2,C:C,0),{1,2}))
[Ctrl]+[Shft] +[Enter] で確定、配列数式。{ }で挟まれる
下へオートフィル

案2
案1の2)まで同じ
3) F2セルに
=IF(E2="","",LEFT(E2,FIND(" ",E2)-1))
下へオートフィル

4)G2セルに
=IF(E2="","",RIGHT(E2,LEN(E2)-LEN(F2)-1))
下へオートフィル

案3
1) [Ctrl]+[F3]名前の定義
名前 入力場所
範囲 =INDEX(Sheet1!$D:$D,COUNTA(Sheet1!$D:$D)+1)

2) コントロールツールボックス(ツールバー)から
リストボックスを適当な位置に作成

3) そのリストボックスをデザインモードで右クリック - プロパティ
ColumnCount 2
LinckedCell 入力場所
ListFillRange A2:B5
に変更する

4) デザインモードを解いてリストボックスをクリックするとD列に番号のみ追加されていく
「Excelの入力規則で2列表示したい」の回答画像4
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
いまひとつ、よくわからないのとE列が表示されるのが意にそぐわないみたいですね。
せっかく、大変詳しくしていただきましたが、#2さんので解決しそうです。
骨を折ってくださり、ありがとうございました。

お礼日時:2015/06/05 11:48

#2です。


=Sheet1!A2& CHAR(10) &Sheet1!B2 はおっしゃる通り、私が間違っていました。
C列はリストを入れていますが、これが余分ですか?ドロップダウンリストの列は必要では?
Left(C2,5)*1は、Vlookupの「検索値」に入れてください。
D列を作業に使うのではなく、
=VLOOKUP(LEFT(C2,5)*1,$A$2:$B$4,2,FALSE)
とD列に入力すれば、OKです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
出来ました。
しかし「’」を付けて「'00200」としてるのですが、頭に0が付くとエラーとなります。
これは何ともならないでしょうか?
よろしくお願います。

お礼日時:2015/06/05 09:11

一例として前の質問の#5さんの回答を使って、実現する方法を。



Sheet1のセルA2~A4に社員コードが、セルB2~B4に社員名がある状態で、
Sheet2のセルA2に=Sheet1!A2& CHAR(10) &Sheet2!B2として、
A4までコピーします。
そうしてSheet2のA列で「折り返して全体を表示する」にすると、
社員コード
社員名
の2行で表示されると思います。
ここで、A2:A4の範囲に名前を定義します。A2:A4を選択し、
数式タブ→名前の定義→コードリスト→OKをクリックしてください。

次に、Sheet1のC2で入力規則でリストを設定します。
データの入力規則→入力値の種類をリストに→元の値のボックスでF3を押す
→名前の貼り付けボックスが出るので、「コードリスト」を選択→OK→OK
C列を「折り返して全体を表示する」設定にして、2行目から4行目までを1行しか
表示できない行の高さに設定します。(たとえば13.5)
これで見た目はコードのみ表示されます。

そして、Vlookupでの検索をするにあたっては、C2そのままを検索値にするの
ではなく、Left(C2,5)*1としてください。
社員コードは5ケタで固定だと思うので、C2の入力値のうち左から5文字目まで
を取り出して検索します。取り出したものは文字列なので数字にするために「*1」
を付加しています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
うーん、ややこしくて少しわかりにくいのですが、まず最初の処で
社員コード社員名の2行で表示されると思います。
が、2行で表示されないのですが?
=Sheet1!A2& CHAR(10) &Sheet1!B2ですよね?これなら出ます。

それからCでドロップダウンリストを出すとコードと氏名となってますし、高さを低くしてますから
選ぶとコードだけの表示にはなっています。
でこの Left(C2,5)*1 はどこにいれますか?D列?
それでE列にVLOOKUPとすると確かにD列とE列で思ってる事にはなってますが、この理解であってますでしょうか?
しかしC列が余分なのですが?
よろしくお願いいます。

お礼日時:2015/06/04 17:02

質問者さんは「目的はCで「ドロップダウンリストに「社員コード」「社員名」と2列表示」にしたい」とおっしゃっていますが、それはどういう状態を指すのか、詳しく説明してください。

C 列の列数は 1 列なのに、2 列にするとは何でしょうか?


引用されている過去の質問では、番号と氏名が 1 対 1 の対応関係になっています。そういう場合、普通は、複数リストの連動などは考えず、単に VLOOKUP 関数を含む数式をセルに記入して終わりです。

VLOOKUP の代わりに INDEX(MATCH) を使っても構いません。列の配置によっては、VLOOKUP では検索できず INDEX(MATCH) にしなければならないこともあります。

ご質問のシートは、別にリスト機能は使っても使わなくても構わないけれど何らかの方法により C 列に番号を記入し、それに対応する氏名を D 列に自動表示させるという内容のようです。C、D 列という 2 列に、一個人に関するデータが表示されている状態になりますね。
この回答への補足あり
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています