電子書籍の厳選無料作品が豊富!

3つあるグループをいくつかのグループに分け直したいと考えております。
最初あるグループをA,B,C,分け直した後のグループを1、2、3、4、5(5グループの場合)
とし、イメージとしては以下のようなものを考えています

1・・・AABCC
2・・・ABBCC
3・・・ABBCC
4・・・ABBC
5・・・ABCC

※A・・・Aグループの人間 B・・・Bグループの人間 C・・・Cグループの人間

なお、A、B、Cグループの人数は全てばらばらで、できれば出席・欠席、グループ数の変更等にも対応できればと考えています。お力添えの方よろしくお願いいたします。

A 回答 (7件)

回答No3及び5です。


その後に欠席などの人についてはグループから外して並び替えたいとのことですね。ここではNo3でのA,B,Cグループの名簿で仮に欠席の人には名前の最後に/0を入力しているとします。
作業が複雑ですので作業列をたくさん用意します。
D2セルには次の式を入力してF2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(OR(A2="",COUNTIF(A2,"*/0")>0),"",MAX(D$1:D1)+1)

G2セルには次の式を入力してI2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(ROW(A1)>MAX(D:D),"",INDEX(A:A,MATCH(ROW(A1),D:D,0)))

J2セルには次の式を入力してL2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(G2="","",RAND())

M2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(J2="","",INDIRECT("G"&RANK(J2,J$2:J$100)+1))

N2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(K2="","",INDIRECT("H"&RANK(K2,K$2:K$100)+1))

O2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(L2="","",INDIRECT("I"&RANK(L2,L$2:L$100)+1))

そこでお求めの表ですがQ列からU列に表示させるとしたらQ2セルに次の式を入力したのちにU2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTIF($M$2:$M$100,"?*"),INDEX($M:$M,COLUMN(A1)+1+(ROW(A1)-1)*5),IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTIF($M$2:$M$100,"?*")+COUNTIF($N$2:$N$100,"?*"),INDEX($N:$N,COLUMN(A1)+1+(ROW(A1)-1)*5-COUNTIF($M$2:$M$100,"?*")),IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTIF($M$2:$M$100,"?*")+COUNTIF($N$2:$N$100,"?*")+COUNTIF($O$2:$O$100,"?*"),INDEX($O:$O,COLUMN(A1)+1+(ROW(A1)-1)*5-COUNTIF($M$2:$M$100,"?*")-COUNTIF($N$2:$N$100,"?*")),"")))
    • good
    • 0
この回答へのお礼

少々複雑な数式で、何か何だかさっぱりわからなくなってしまいましたが、
教えていただいたとおりに入力したところ
完璧に私の希望に対応しておりました。
本当にありがとうございました。

したがって、ベストアンサーとさせていただきます。
他の方々も含め、私の為に時間を割いていただいた皆様方本当にありがとうございました。

お礼日時:2011/09/19 23:01

名前・グループ名などの元データをコピペしておく



D2セル
=IF(C2="欠席","欠席",B2&RAND())
下へオートフィル
並び替えは D列のセル一つ選んで[昇順で並び替え]
これでランダムに並び変わる
欠席者は処理が面倒なので最後に持ってくる

G2セル
=IF(COLUMN(A1)>$L$1,"",IF($F2*$L$1-$L$1+COLUMN(A1)>$L$2,"",INDEX($A:$A,$F2*$L$1-$L$1+COLUMN(A1)+1)))
右へ下へオートフィル

L2セル
=COUNTA(A:A)-1-COUNTIF(C:C,"欠席")
「エクセルを使ったグループ分け」の回答画像7
    • good
    • 0
この回答へのお礼

画像まで貼っていただいてありがとうございます。
とても分かりやすくほぼ理想に近い形になりました。
ありがとうございました。

お礼日時:2011/09/19 22:58

回答No3です。

名前の順序をランダムにしたいとのことですね。元のデータからランダムな名簿を作り、それを5列に並べることにした方法を述べます。
元のデータはNo3で示した通りとしてランダムに並べるための操作を作業列を使って行います。
D2セルには次の式を入力してF2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(A2="","",RAND())

次にG2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(D2="","",INDIRECT("A"&RANK(D2,D$2:D$100)+1))

次にH2セルには次の式に入力して下方にオートフィルドラッグします。

=IF(E2="","",INDIRECT("B"&RANK(E2,E$2:E$100)+1))

次にI2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(F2="","",INDIRECT("C"&RANK(F2,F$2:F$100)+1))

これでG列からI列にはA,B,Cグループでそれぞれの名前がランダムに並べられます。この名前を元に5グループへの並べ替えをするためK1セルには1グループ、L1セルには2グループ・・・・と5グループまで文字列を入力したのちに、K2セルには次の式を入力してO2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTIF($G$2:$G$100,"?*"),INDEX($G:$G,COLUMN(A1)+1+(ROW(A1)-1)*5),IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTIF($G$2:$G$100,"?*")+COUNTIF($H$2:$H$100,"?*"),INDEX($H:$H,COLUMN(A1)+1+(ROW(A1)-1)*5-COUNTIF($G$2:$G$100,"?*")),IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTIF($G$2:$G$100,"?*")+COUNTIF($H$2:$H$100,"?*")+COUNTIF($I$2:$I$100,"?*"),INDEX($I:$I,COLUMN(A1)+1+(ROW(A1)-1)*5-COUNTIF($G$2:$G$100,"?*")-COUNTIF($H$2:$H$100,"?*")),"")))

これでK列からO列には5グループの名前が表示されることになります。
    • good
    • 0

#2です。

補足ありがとう。
下記は単純な割り当て方法なのですが、下記ではどうだろう。
グループからの人間をなるべく分散させるのを第1に考えている。
例 Sheet1
グループでソート、A、B,Cの順に集る。下記はソート後からの話。
A田中
A石田
A大田
A木村
A水野
A河合
B鈴木
B川崎
B品川
B河北
B内田
B戸田
B内村
B大山
C田上
C上田
C今野
C今川
C木下
C西田
C今井
C北村
C東
Sheet2
5グループの場合
A2セルに =IF((ROW()-1)+(COLUMN()-1)*5>23,"",INDEX(Sheet1!$A:$B,(ROW()-1)+(COLUMN()-1)*5,2))
と入れて、A6まで5行で式複写。
A2:A6の式を右方向に式複写
結果
田中河合内田上田今井
石田鈴木戸田今野北村
大田川崎内村今川東
木村品川大山木下
水野河北田上西田
グループ記号で言えば
A2に =IF((ROW()-1)+(COLUMN()-1)*5>23,"",INDEX(Sheet1!$A:$B,(ROW()-1)+(COLUMN()-1)*5,1))ト入れて
上記と同じことをする。
質問に挙げられた例(結果の1例)と同じになる。
AABCC
ABBCC
ABBCC
ABBC
ABCC
6グループにする場合はSheet3の
A2に =IF((ROW()-1)+(COLUMN()-1)*6>23,"",INDEX(Sheet1!$A:$A,(ROW()-1)+(COLUMN()-1)*6,1))
と入れて、6行縦に式を複写し、A2:A7の式を右方向に式複写する。
結果
ABBC
ABBC
ABCC
ABCC
ABCC
ABC
名前版の式は
=IF((ROW()-1)+(COLUMN()-1)*6>23,"",INDEX(Sheet1!$A:$B,(ROW()-1)+(COLUMN()-1)*6,2))
結果
田中鈴木内村木下
石田川崎大山西田
大田品川田上今井
木村河北上田北村
水野内田今野東
河合戸田今川
A列を明けたい場合は、Sheet4のB2に
=IF((ROW()-1)+(COLUMN()-2)*5>23,"",INDEX(Sheet1!$A:$B,(ROW()-1)+(COLUMN()-2)*5,1))
結果B2:F6 A列は式が無く空白(グループ番号などを入れる)列に使う
AABCC
ABBCC
ABBCC
ABBC
ABCC
ーー
欠席が混じる場合で出席者のみで考える場合は、出席(1)や欠席(2)のコードの列でソートして分離し、上に集った出席者のみのセル範囲で上記回答の方法を行うとどうだろう。
    • good
    • 0
この回答へのお礼

教えていただいた中でもっとも簡単な数式で
ほぼ理想に近い形になりました。
ありがとうございました

お礼日時:2011/09/19 22:55

例として次に述べますので必ず一度述べたとおりに表を作成して試験してください。

その結果をご自分の表に適応することで問題が解決できるのではないかと思います。
A1セルにはAグループと入力したのちに、A2セルには例えばA1と入力し、下方にオートフィルドラッグします。下方にはA2,A3,A4・・・と表示されますね。適当な番号まで表示させます。
B1セルにはBグループと入力したのちに、B2セルにはB1と入力し下方にオートフィルドラッグします。
C1セルにはCグループと入力したのちに、C2セルにはC1と入力し下方にオートフィルドラッグします。
いずれも下方への表示は適当な行まで行います。A,B,C列では表示の行が勿論変わっていて問題ありません。
ただし、ここでは最大100行までの式になっていますが1000までの式に変えることもできます。
さて5グループに並べ替えるための操作ですがE1セルに1グループと入力したのちにI1セルまでオートフィルドラッグして5グループまでを表示させます。
その後にE2セルには次の式を入力したのちI2セルまで横方向にオートフィルドラッグしたのち下方にもオートフィルドラッグします。

=IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTA($A$2:$A$100),INDEX($A:$A,COLUMN(A1)+1+(ROW(A1)-1)*5),IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTA($A$2:$A$100)+COUNTA($B$2:$B$100),INDEX($B:$B,COLUMN(A1)+1+(ROW(A1)-1)*5-COUNTA($A$2:$A$100)),IF((ROW(A1)-1)*5+COLUMN(A1)<=COUNTA($A$2:$A$100)+COUNTA($B$2:$B$100)+COUNTA($C$2:$C$100),INDEX($C:$C,COLUMN(A1)+1+(ROW(A1)-1)*5-COUNTA($A$2:$A$100)-COUNTA($B$2:$B$100)),"")))

これでE列からI列にはお望みのグループ分けされた結果が表示されます。5グループ以外にする場合には上記の式で5の数値を変えることで良いでしょう。

この回答への補足

乱数を与えようと思ったのですが、
上の数式を理解していないせいでどこかで
ずれが生じてしまい、いまひとつな感じになってしまいました;

元のデータを他の場所に残したまま、
ランダムの順で名前をA1~A○、B1~B○、C1~C○
の位置にに入力させるにはどうすればよいでしょう??

補足日時:2011/09/18 19:50
    • good
    • 0
この回答へのお礼

詳しくご説明ありがとうございました。結果、以下のような
出力結果を得ることができました。
希望はこれに加え、A1~A9、B1~B11、C1~C14の間でランダムに並びかえたいというものでしたが、元データに乱数を与え、ソートすることで解決できそうです。ありがとうございました。

1グループ2グループ3グループ4グループ5グループ
A1A2A3A4A5
A6A7A8A9B1
B2B3B4B5B6
B7B8B9B10B11
C1C2C3C4C5
C6C7C8C9C10
C11C12C13C14

お礼日時:2011/09/18 19:35

シートのデータの様子も質問に書かないで質問してどうする。


ある列に、並べなおす「キー」はあるのか、造る(入力する)のか、人間が総合的に判断して分類コードなどを入力するのか、または何かこんなことではないのか、はっきりさせるため、この質問に補足を書くこと。
>、A、B、Cグループの人数は全てばらばら・・
こんなことは普通問題にならない。コンピュターで並べなおす場合は。
>グループ数の変更等・・
所属するが変わった時にはシートのデータはどうなるのか。
コンピュターの並びを自動的に整えるには、それに相応しいデータが無いといけない。
こんなことはコンピュター処理の基礎。
    • good
    • 0
この回答へのお礼

失礼しました。
並び直すキーはランダム(乱数)を希望です。

A ○○太郎
A ○○花子
   ・
   ・
   ・
C ○○二郎

以上のデータを保持したまま

1 A ○○太郎
  A ○○三郎
  B ○○四朗
  C ○○二郎

2 A ○○花子
  B ○○○○
  B ○○○○
  C ○○○○

以上のように出力させるのが希望です

行程としてはAグループのメンバーをランダムに並び変えて
1グループ2グループ3グループ・・・に配分

Bグループのメンバーをランダムに並び変えて、
Aグループの最後の人が配分された次のグループから順に配分

Cグループのメンバーをランダムに並び変えて、
Bグループの最後の人が配分された次のグループから順に配分

のようなものを希望しております。
あと、例えば出席している人に1、
欠席している人に0というキーを与えた場合に
0を与えた人間だけ飛ばすことや、
作り直した後のグループの数を簡単に変えれたらいいなと思っています。
(A,B,C→1、2、3、4 ⇒ A,B,C→1、2、3、4、5、)

お礼日時:2011/09/18 18:42

単にリストを並べ替えるだけのことと思われますので、ソートすればいいだけだと思います。

それで問題があるのなら、もっと詳しく書いてください。

ソートのやり方
http://www.eurus.dti.ne.jp/~yoneyama/Excel/sort. …
EXCELのバージョンによってソートのダイアログボックスが異なるので、とりあえず2003以前の古いバージョンでのやり方です。2007以降では画面が違いますが、考え方は同じで、項目が4つ以上に対応していますからより便利になっています。
ソートは基本中の基本なので、自分で調べてみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
少々、説明が不十分でした。
分けた後の文字Aの中身についてはランダムで
変更可能な状態にしたいのが希望です。
あと、元データの3グループもそのままデータとして残しておきたいです。

お礼日時:2011/09/18 18:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!