• ベストアンサー

エクセル・データをランダムにグループ分けする

エクセルで用意された氏名・所属・年齢・性別データが約2000件あります。各データは氏名のあいうえおごとに作成したシートに入っています。各シートには0から最大で100件のデータがあります。これらのデータを、あいうえお順ではないランダムな10のグループに分け直したいのですが、どうしたらよろしいでしょうか。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

お呼びでないかもしれませんが、マクロで行う例です。 各シートのデータ構造は下記の通りと仮定し、「サンプリング」というシートに、残りの各シートのデータをランダムな順番で拾い出します。ランダムな順なので、頭から10ブロックに分ければ良いと思います。 ....................A...............B...............C...............D ..1..............氏名.........所属.........年齢.........性別 ..2..............花子.....営業部.............29.............女 ..3..............太郎.....総務部.............36.............男 最近Collectionに凝っておりまして、それを使って作成してみました。 Sub test() Dim sh As Worksheet Dim targetRanges As Collection Dim tempRange As Range Dim myRow As Range Dim destRange As Range Dim pickUp As Long Set targetRanges = New Collection For Each sh In ThisWorkbook.Worksheets If sh.Name <> "サンプリング" Then Set tempRange = sh.Range("a1").CurrentRegion If tempRange.Rows.Count > 1 Then Set tempRange = tempRange.Offset(1, 0).Resize(tempRange.Rows.Count - 1, tempRange.Columns.Count) For Each myRow In tempRange.Rows targetRanges.Add Item:=myRow Next myRow End If End If Next sh Set destRange = Sheets("サンプリング").Range("a1") 'Collectionからランダムな順番で抜き出す Do While targetRanges.Count >= 1 Randomize pickUp = Int(Rnd() * targetRanges.Count) + 1 targetRanges(pickUp).Copy destRange Set destRange = destRange.Offset(1, 0) targetRanges.Remove (pickUp) Loop End Sub

その他の回答 (1)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

A:D列にデータがあるとして E2=RAND() F2=ROUNDUP(RANK($E:$E,E2,0)/(COUNT($E:$E)/10),0) これを最後の行までコピー F列に1~10の数値が表示されるのでこの内容をコピーして G列に値として貼り付けしてください。 後はG列で並べ替えるなり、オートフィルタで選択するなりして G列の数値毎に別シートに内容を貼り付けてください。

3733Q
質問者

お礼

早速にありがとうございました。簡単な仕事なのですが、手作業ではとてつもなく時間が掛かってしまいそうで、気が滅入っていたところでした。助かります。

関連するQ&A