- ベストアンサー
空白セル以外の複数セルの表示
初めて利用させていただきます。 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とかマクロなどといった事が 解らない為、何とか関数で出来ないかと 思案しております。 どなたかお解かりになられます方、いらっしゃれば ご教授いただけないでしょうか? お手数で大変申し訳ございません。 宜しくお願い申し上げます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
◆こんな方法もありますよ(出勤する人数は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),"") ★下にコピー
その他の回答 (5)
- zap35
- ベストアンサー率44% (1383/3079)
#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の回答の方が簡単になると思います。
お礼
zap35さん、何度もご親切にありがとうございます。 3通ともなるほどと本当に感服しております。 この場で短時間にたくさんの方から ご教授いただけました。 本当にご親切な皆様に感謝しております。 皆様にポイントを差し上げたい気持ちです。 本当に本当にありがとうございました。 もっと勉強いたします。
- mshr1962
- ベストアンサー率39% (7417/18945)
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で配列数式に 注意 誰もいないとエラーになります。 一人しかいないと同じ名前 二人以上だと最初と最後の列の名前
お礼
ご回答賜りありがとうございます。 短時間でここまでの数式がお解かりになられるのは 凄いですねっ! 朝から今まで無知の私にはトホホでしたが 皆様のご回答に目が○○!です。 とても感謝いたしております。 本当に本当にご親切にありがとうございました。
- zap35
- ベストアンサー率44% (1383/3079)
#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)
F1に以下の数式を入力し、配列数式なのでCtrl+Shift+Enterで確定してください。 =INDEX($A1:$E1,SMALL(IF($B1:$E1<>"",COLUMN($B1:$E1),10^5),COLUMN(A1))) あとはそれを右と下にコピーです。
お礼
迅速なご回答を賜りありがとうございます。 ヒントをいただけた事、とても感謝しています。 早速自分のシートで行列番号変えてやってみます。 ご親切にありがとうございました。
- zap35
- ベストアンサー率44% (1383/3079)
>C1とE1の空白セル(""としています)はF1・G1では無視させたいのです。 の意味が理解できません・どのようなルールでF1,G1に入れる値が決まるか書かれていないからです。 B1からE1が全て名前が入っていたらF1,G1にはどの名前が入るのですか? それともB1~E1には必ず2名の名前しか入らず、その2名の名前をF1,G1に入れるということでしょうか?
補足
説明不足で大変申し訳ございませんでした。 zap35サンのおっしゃる通り B1~E1の間は2名しか入らないです。 また Bは田中、Cは佐藤、Dは吉田、Eは中村の列と 決まっておりその為出勤で無い日は非表示となっています。 出勤日のみ各々の列に名前が表示されるといぅ意味です。 解りにくくて申し訳ございません。 ご指摘ありがとうございました。
お礼
ありがとうございます。 出来ました(泣ッ!) ただ単純に嬉しくてしかたありません。 使用関数言語も私の使い慣れたものばかりです。 「こういう組合せをすればよいのか なるほどぉ~」と、大変勉強になりました。 maron-5さん、本当に感謝しております。 ご教授いただけましたご親切な皆様、 とっても感謝しております。 何といってよいのか解りませんが とにかく本当に本当にありがとうございます。