• ベストアンサー

空白セル以外の複数セルの表示

初めて利用させていただきます。 Excelでシフト表を作成しております。 何人か居るなかでその日に出勤する人の名前のみ 表示させたいのですが…↓ (例)    A  B  C  D  E  F  G 1  4/1 田中    吉田    田中 吉田 2  4/2    佐藤    中村 佐藤 中村 といぅ具合です。 B~Eまでは違うテーブルで作成した結果が 反映される仕組みで、横4つ(B~E)の結果から FとGにその日の出勤者の名前を表示させたいのです。 つまり、F1には4/1のB1~E1までの出勤者1人 G1には4/1のもう一人の出勤者の名前を表示させ C1とE1の空白セル(""としています)はF1・G1では 無視させたいのです。 私は勉強不足でVBAとかマクロなどといった事が 解らない為、何とか関数で出来ないかと 思案しております。 どなたかお解かりになられます方、いらっしゃれば ご教授いただけないでしょうか? お手数で大変申し訳ございません。 宜しくお願い申し上げます。

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.5

◆こんな方法もありますよ(出勤する人数は2名以下とします) F1=IF(COUNTIF(B1:E1,">*"),INDEX(B1:E1,MATCH(1,INDEX(1/(B1:E1<>""),),0)),"") ★下にコピー G1=IF(COUNTIF(B1:E1,">*")>1,LOOKUP(1,0/((B1:E1<>"")),B1:E1),"") ★下にコピー

nana20010
質問者

お礼

ありがとうございます。 出来ました(泣ッ!) ただ単純に嬉しくてしかたありません。 使用関数言語も私の使い慣れたものばかりです。 「こういう組合せをすればよいのか なるほどぉ~」と、大変勉強になりました。 maron-5さん、本当に感謝しております。 ご教授いただけましたご親切な皆様、 とっても感謝しております。 何といってよいのか解りませんが とにかく本当に本当にありがとうございます。

その他の回答 (5)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

#01です。もし担当者の列数が実際にも4列しかないなら、F1は =IF(B1<>"",B1,IF(C1<>"",C1,IF(D1<>"",D1,IF(E1<>"",E1,"")))) G1は =IF(E1<>"",E1,IF(D1<>"",D1,IF(C1<>"",C1,IF(B1<>"",B1,"")))) でも良いです。これならIF文の繰り返しなので理解が簡単でしょう。 でも実際には担当者がもっと多いなら#03の回答の方が簡単になると思います。

nana20010
質問者

お礼

zap35さん、何度もご親切にありがとうございます。 3通ともなるほどと本当に感服しております。 この場で短時間にたくさんの方から ご教授いただけました。 本当にご親切な皆様に感謝しております。 皆様にポイントを差し上げたい気持ちです。 本当に本当にありがとうございました。 もっと勉強いたします。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

F1=INDEX($B1:$E1,1,MIN(IF(($B1:$E1<>""),COLUMN($B1:$E1)-1,5))) でCtrl+Shift+Enterで配列数式に G1=INDEX($B1:$E1,1,MAX(IF(($B1:$E1<>""),COLUMN($B1:$E1)-1,0))) でCtrl+Shift+Enterで配列数式に 注意 誰もいないとエラーになります。 一人しかいないと同じ名前 二人以上だと最初と最後の列の名前

nana20010
質問者

お礼

ご回答賜りありがとうございます。 短時間でここまでの数式がお解かりになられるのは 凄いですねっ!  朝から今まで無知の私にはトホホでしたが 皆様のご回答に目が○○!です。 とても感謝いたしております。 本当に本当にご親切にありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。F1の式は =INDEX($A1:$E1,LARGE(INDEX(($B1:$E1<>"")*COLUMN($B1:$E1),),2)) G1の式は =INDEX($A1:$E1,LARGE(INDEX(($B1:$E1<>"")*COLUMN($B1:$E1),),1)) でいけると思います。F1,G1を下方向にコピーしてください この式では値が入っている列番号が一番大きいものをG1、二番目に大きいものをF1に格納しています。(だから3人の名前があると右側の2名がF1,G1に格納されます) この式では二名の名前が入っていない行では#VALUE!エラーになります。エラー表示させたくないなら、式が長くなりますがF1は =IF(LARGE(INDEX(($B1:$E1<>"")*COLUMN($B1:$E1),),2)>0,INDEX($A1:$E1,LARGE(INDEX(($B1:$E1<>"")*COLUMN($B1:$E1),),2)),"") G1は =IF(LARGE(INDEX(($B1:$E1<>"")*COLUMN($B1:$E1),),1)>0,INDEX($A1:$E1,LARGE(INDEX(($B1:$E1<>"")*COLUMN($B1:$E1),),1)),"") となります。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

F1に以下の数式を入力し、配列数式なのでCtrl+Shift+Enterで確定してください。 =INDEX($A1:$E1,SMALL(IF($B1:$E1<>"",COLUMN($B1:$E1),10^5),COLUMN(A1))) あとはそれを右と下にコピーです。

nana20010
質問者

お礼

迅速なご回答を賜りありがとうございます。 ヒントをいただけた事、とても感謝しています。 早速自分のシートで行列番号変えてやってみます。 ご親切にありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

>C1とE1の空白セル(""としています)はF1・G1では無視させたいのです。 の意味が理解できません・どのようなルールでF1,G1に入れる値が決まるか書かれていないからです。 B1からE1が全て名前が入っていたらF1,G1にはどの名前が入るのですか? それともB1~E1には必ず2名の名前しか入らず、その2名の名前をF1,G1に入れるということでしょうか?

nana20010
質問者

補足

説明不足で大変申し訳ございませんでした。 zap35サンのおっしゃる通り B1~E1の間は2名しか入らないです。 また Bは田中、Cは佐藤、Dは吉田、Eは中村の列と 決まっておりその為出勤で無い日は非表示となっています。 出勤日のみ各々の列に名前が表示されるといぅ意味です。 解りにくくて申し訳ございません。 ご指摘ありがとうございました。