- ベストアンサー
エクセル:関数を使ってグループ分け
それらしい文言も調べてみましたが、応用できるほど知識がなかったため質問させていただきます。 30人~40人(毎月可変)に4つの日付を割り振るという表を作りたいと思っています。 I36に書かれている日付を上から順番に、G36に書かれた人数(毎月7,8程)ずつ順番に割り振りたいです。 月4回の勤務表のようなものです。 セルの位置はどこでもよいのですが、レイアウトだけはこのように作りたいと思っています。 関数だけでなんとかなりますでしょうか。 説明下手で申し訳ないです。
- みんなの回答 (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)),""))
その他の回答 (2)
- kagakusuki
- ベストアンサー率51% (2610/5101)
>式を入れてみたのですが、日付の表示もできず 申し訳御座いません。動作確認も兼ねて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()),"*?")),""))
補足
何度も回答ありがとうございます。 順番に並べることはできましたが、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)
まず、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行目以下に貼り付けて下さい。 以上です。
補足
式を入れてみたのですが、日付の表示もできず、どのように改変すれば良いかもわからなかったので、再度質問させていただきます。 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日 お早い回答をいただけましたが、私の説明不足のようでお手数だけおかけしてしまい申し訳ありません。
お礼
重ね重ねお手数おかけしました。 望みの通りのものができ、本当に助かりました。ありがとうございます。