• ベストアンサー

別表に入力されている名前を関数で表示させたい

Excel2007 関数を使って sheet 1 に社員のリスト作成 Sheet 2 に勤務場所・担当者(各1名)などをを入力              B1,B2,B3~には日付(12/1 12/2)       A2,A3,A4~には担当部署       B2,B3,B4~ C2,C3,C4,~はその日のその部署の担当者を各1名入力 その結果その日の休みの人の名前を各列の下に表示させたい。 (その日に名前が入力されていない名前を各列の下にを表示させたい。) まだ関数は初心者に近いのでできるだけ簡単な方法で教えてください。     

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

  • ベストアンサー
回答No.4

#1です >作業表はどういう意味ですか。 休みの人を上に付けて並べるための表を得るための作業(中継)です >作業表の0、1、2は何を表わしているのですか。 休みの人を判定し、休みなら+1。MATCH関数で検索するため。 できるだけ、初心者に優しい関数を使い、わかりやすい表を作ったつもりです。 関数もIF,ISNA,INDEX,MATCHと4種類に抑えました。 各関数はヘルプなどで調べてください。 また作業用の表は、行を非表示にしておけば気にならないでしょう。

onft
質問者

お礼

ありがとうございました。 試してみました。 私にもでき、感激しました。

その他の回答 (3)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

#2です。 添付がうまくいかないので、ちょっと説明します。 Sheet1は、B2~B11に社員リストがあります。 Sheet2は、質問と同じですが、7行目まで割り付け表で、8行目を開けて、9行目から休みの人の表示です。 #2は、それに対応した関数です。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

「初心者に近いのでできるだけ簡単な方法」 なんてありません。 添付画像参照。 B9に、下記関数は配列数式ですから、入力したら数式バーにカーソルを置いて、Ctrl+Shift+Enterを押す。関数の前後が{ }で囲まれればOKです。 =IF(COUNT(IF(ISERROR(MATCH(Sheet1!$B$2:$B$11,B$2:B$7,0)),ROW(Sheet1!$B$2:$B$11),""))>=ROW()-8,INDEX(Sheet1!$B$2:$B$11,SMALL(IF(IF(ISERROR(MATCH(Sheet1!$B$2:$B$11,B$2:B$7,0)),ROW(Sheet1!$B$2:$B$11),"")<>"",IF(ISERROR(MATCH(Sheet1!$B$2:$B$11,B$2:B$7,0)),ROW(Sheet1!$B$2:$B$11),""),""),ROW()-8)-1),"") あとは、下と右方向にフィルドラッグします。 Sheet1!$B$2:$B$11  Sheet1の社員リストです。 B$2:B$7         Sheet2の表の始めの列です。 ROW()-8        休みの名前を入れる位置が、9行目から始まっているので、そのオフセットです。休みの人のSheet1の表の行番号をとります。10行目からだったら9を引きます。 ROW()-8)-1      Sheet1の休みの人のリストの位置をとります。リストが2行目から始まっているので、1引くと1番目になります。3行目から始まっているなら2を引きます。 これらは、実態に合わせて変えてください。 範囲に名前を付ければ、もう少し式が短くわかりやすくなります。

回答No.1

右側がSheet2 C8セル =A2 下へオートフィル D7:G7セル 0 D8セル =IF(ISNA(MATCH($C8,D$2:D$5,0)),D7+1,D7) 右へ下へオートフィル C15セル 1 下へ連番 D15セル =IF(ISNA(MATCH($C15,D$8:D$12,0)),"", INDEX($C$8:$C$12,MATCH($C15,D$8:D$12,0))) 右へ下へオートフィル C:G列を切り取り Sheet2へ貼り付け

onft
質問者

補足

ありがとうございます。 試してみます。  作業表はどういう意味ですか。    作業表の0、1、2は何を表わしているのですか。