• ベストアンサー

エクセル:関数を使ってグループ分け

それらしい文言も調べてみましたが、応用できるほど知識がなかったため質問させていただきます。 30人~40人(毎月可変)に4つの日付を割り振るという表を作りたいと思っています。 I36に書かれている日付を上から順番に、G36に書かれた人数(毎月7,8程)ずつ順番に割り振りたいです。 月4回の勤務表のようなものです。 セルの位置はどこでもよいのですが、レイアウトだけはこのように作りたいと思っています。 関数だけでなんとかなりますでしょうか。 説明下手で申し訳ないです。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>G36が3であれば補足の通り、2であれば(中略)となるようにしたいのです。  重ね重ね御質問内容を勘違いしてしまい誠に申し訳御座いません。  その場合は次の様な関数になります。 =IF(OR($B36="",SUM($G$36)<1,INT(SUM($G$36))<>SUM($G$36)),"",IFERROR(SMALL($I$36:INDEX($I:$I,MATCH(9E+307,$I:$I)),ROUNDUP((COUNTIF($B$36:INDEX($B:$B,MATCH(9E+307,$A:$A)),"*?")*(COLUMNS($C:C)-1)+COUNTIF($B$36:INDEX($B:$B,ROW()),"*?"))/$G$36,0)),"")) 或いは =IF(OR($B36="",SUM($G$36)<1,INT(SUM($G$36))<>SUM($G$36)),"",IFERROR(SMALL($I$36:INDEX($I:$I,MATCH(9E+307,$I:$I)),ROUNDUP(((COUNTIF($B:$B,"*?")-COUNTIF($B$1:$B$35,"*?"))*(COLUMNS($C:C)-1)+COUNTIF($B$36:INDEX($B:$B,ROW()),"*?"))/$G$36,0)),""))

FJTM006
質問者

お礼

重ね重ねお手数おかけしました。 望みの通りのものができ、本当に助かりました。ありがとうございます。

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>式を入れてみたのですが、日付の表示もできず  申し訳御座いません。動作確認も兼ねてExcel Book上にno、name、日付等のデータを実際に入力してから関数を作って行った際に、日付を入力する列をI列にしなければならない所を、誤ってH列に日付を入力してしまい、その状態のままで関数を作っておりました。  正しくは次の様な関数になります。 =IF($B36="","",IFERROR(SMALL($I$36:INDEX($I:$I,MATCH(9E+307,$I:$I)),COUNTIF($B$36:INDEX($B:$B,MATCH(9E+307,$A:$A)),"*?")*(COLUMNS($C:C)-1)+COUNTIF($B$36:INDEX($B:$B,ROW()),"*?")),"")) 或いは =IF($B36="","",IFERROR(SMALL($I$36:INDEX($I:$I,MATCH(9E+307,$I:$I)),(COUNTIF($B:$B,"*?")-COUNTIF($B$1:$B$35,"*?"))*(COLUMNS($C:C)-1)+COUNTIF($B$36:INDEX($B:$B,ROW()),"*?")),""))

FJTM006
質問者

補足

何度も回答ありがとうございます。 順番に並べることはできましたが、G36の数字をどう組み込めば良いのかわからず、再度質問させてください。 G36が3であれば補足の通り、2であれば no name 1  2    3   4 1 あ 1月2日 1月4日 1月8日 1月11日 2 い 1月2日 1月4日 1月8日 1月11日 3 う 1月3日 1月7日 1月10日 1月12日 4 え 1月3日 1月7日 1月10日 1月12日 となるようにしたいのです。 何度もお手数おかけして申し訳ありません。 よろしくお願いいたします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 まず、C36セルに次の2つの関数の内の何れか1つを入力して下さい。 =IF($B36="","",IFERROR(SMALL($H$36:INDEX($H:$H,MATCH(9E+307,$H:$H)),COUNTIF($B$36:INDEX($B:$B,MATCH(9E+307,$A:$A)),"*?")*(COLUMNS($C:C)-1)+COUNTIF($B$36:INDEX($B:$B,ROW()),"*?")),"")) 或いは =IF($B36="","",IFERROR(SMALL($H$36:INDEX($H:$H,MATCH(9E+307,$H:$H)),(COUNTIF($B:$B,"*?")-COUNTIF($B$1:$B$35,"*?"))*(COLUMNS($C:C)-1)+COUNTIF($B$36:INDEX($B:$B,ROW()),"*?")),""))  次に、C36セルの書式設定を[日付]に設定して下さい。  次に、C36セルをコピーして、D36~F36のセル範囲に貼り付けて下さい。  次に、C36~F36のセル範囲をコピーして、C列~F列の37行目以下に貼り付けて下さい。  以上です。

FJTM006
質問者

補足

式を入れてみたのですが、日付の表示もできず、どのように改変すれば良いかもわからなかったので、再度質問させていただきます。 A35のnoから以下の通りになっています。 I36~日付が並んでおり、G36に入っている数字ずつ割り振るような表を作ろうと思っています。 I36から1月2日、3日、4日、7日、8日、10日と入っているとして G36が3の場合、以下のように自動で記入してくれるようにしたいです。 no name 1  2    3   4 1 あ 1月2日 1月3日  1月4日 1月8日 2 い  1月2日 1月3日 1月7日 1月8日 3 う  1月2日 1月4日 1月7日 1月8日 4 え 1月3日 1月4日 1月7日 1月10日 お早い回答をいただけましたが、私の説明不足のようでお手数だけおかけしてしまい申し訳ありません。

関連するQ&A