• 締切済み

マクロが必要かと思いますが、よろしくお願いします。

会社で庶務をしております。 契約社員の出勤状況によって、座席の配置を決めなければいけませんが、 効率的な方法を模索中です。 シフトが毎日変わるため、当日の出席者だけを抽出して、自動的に 座席表に反映させたいです。 現在、シフト表はC列に名前が、D列以降に日付毎のシフトが入力されています。 (シフト表は私では変更出来ません。) シフトはアルファベット『F・S・L』などで入力されています。 欠席の場合は、セルにピンクで色付けをして、『-』となっております。 私が作成しているシートに、色付けがされていない行(つまり出勤者) のみをコピーして反映させたいです。 わかりにくいかもしれませんが、困っておりますので よろしくお願いいたします。

みんなの回答

  • Tofu-Yo
  • ベストアンサー率33% (36/106)
回答No.3

あまりイメージがわかないので的を得ているかわかりませんが、欠席者に「-」が入力されていて出勤者の行だけ抽出して別のシートに貼り付けたいのであれば、オートフィルタ機能で「-」以外の行だけを表示させて、全体をコピーして他のシートに貼り付けるというのではだめでしょうか?

kapipara60
質問者

補足

質問番号:6755516 にて新規に質問させていただきました。 よろしくお願いいたします。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

例えばシフト表がシート1に有り、C1セルに名前の文字がD1セルからAIセルまでにその月の日付が入力されているとします。それぞれのデータは下行に入力されているとします。そこで作業列をAI列に作って、AI2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(D$1:AH$1,Sheet2!B$1)=0,"",IF(INDEX(D:AH,ROW(A2),MATCH(Sheet2!B$1,D$1:AH$1,0))="F",100+COUNTIF(INDEX(D:AH,ROW(A$2),MATCH(Sheet2!B$1,D$1:AH$1,0)):INDEX(D:AH,ROW(A2),MATCH(Sheet2!B$1,D$1:AH$1,0)),"F"),IF(INDEX(D:AH,ROW(A2),MATCH(Sheet2!B$1,D$1:AH$1,0))="S",200+COUNTIF(INDEX(D:AH,ROW(A$2),MATCH(Sheet2!B$1,D$1:AH$1,0)):INDEX(D:AH,ROW(A2),MATCH(Sheet2!B$1,D$1:AH$1,0)),"S"),IF(INDEX(D:AH,ROW(A2),MATCH(Sheet2!B$1,D$1:AH$1,0))="L",300+COUNTIF(INDEX(D:AH,ROW(A$2),MATCH(Sheet2!B$1,D$1:AH$1,0)):INDEX(D:AH,ROW(A2),MATCH(Sheet2!B$1,D$1:AH$1,0)),"L"),"")))) お望みの表をシート2に作るとしてA1セルには日付の文字を入力し、B1セルには抽出したい日付を例えば5/20のように入力します。 そこでA列には氏名をB列には当日のF,S,Lなどの文字を表示させるのでしたらA2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>COUNT(Sheet1!$AI:$AI),"",IF(COLUMN(A1)=1,INDEX(Sheet1!$C:$C,MATCH(SMALL(Sheet1!$AI:$AI,ROW(A1)),Sheet1!$AI:$AI,0)),IF(COLUMN(A1)=2,IF(INT(INDEX(Sheet1!$AI:$AI,MATCH(SMALL(Sheet1!$AI:$AI,ROW(A1)),Sheet1!$AI:$AI,0))/100)=1,"F",IF(INT(INDEX(Sheet1!$AI:$AI,MATCH(SMALL(Sheet1!$AI:$AI,ROW(A1)),Sheet1!$AI:$AI,0))/100)=2,"S",IF(INT(INDEX(Sheet1!$AI:$AI,MATCH(SMALL(Sheet1!$AI:$AI,ROW(A1)),Sheet1!$AI:$AI,0))/100)=3,"L",""))),""))) これで氏名は当日のシフトでF,S,Lの順に上から並べて表示されます。 ここで示したと同じ条件で試験をしてみてください。その結果を受けてご自分のシートで求めたい式を工夫されたらいかがでしょう。 なお、シート1については保護がかけられて細工ができないとのことでしたら、シート1のコピーを別のシートに作ってそこに作業列を作ってみてはいかがでしょう。 シート1のコピーは別のシートのA1セルに=Sheet1!A1と入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグすれば作成することができます。

kapipara60
質問者

補足

詳しい説明ありがとうございました。 頂いておきながら、申し訳ございませんが 二つ目の数式がどうしてもエラーとなってしまいます。 今日中に今一度シフト表の詳しいデータを補足して 質問させて頂きたく思いますので よろしくお願い致します。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

あなたが作成しているシート(シートの名前は?)の,具体的にどこ番地のセルにどのような内容で結果が現れたら,あなたのお仕事的に最も使いやすくなるのですか? 元になるシフト表の「シート名」「何列から何列まで,何行から何行に,どういうデータや数式が入っている(何行何番地から何番地まではこれこれの内容で日付が入っている等)」といった情報と共に,具体的にあなたのエクセルの様子が目に見えるように(=回答者が自分たちの手元で可能な限りあなたのエクセルの姿を再現できるように)情報を補足してください。

kapipara60
質問者

補足

説明が不十分で申し訳ございませんでした。 シフト表が現在閲覧できない状態ですので、 本日中に再度補足し質問させて頂きます。 よろしくお願いいたします。

関連するQ&A