位置情報で子どもの居場所をお知らせ

グループ分けの方法について質問させて頂きます。

50人を7つのグループに分ける方法についてです。
人数は、7人グループ6つ、8人グループ一つです。

このグループ分けを5回行いますが、毎回、それぞれが
出来る限り同じグループになったことのない人とあたるように分けたいのですが・・・

何かうまい方法はないでしょうか。
よろしくお願い致します。

A 回答 (3件)

   1,2,3,4,5,6,7、


   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、

   1,2,3,4,5,6,7、
   7、1,2,3,4,5,6、
   6,7、1,2,3,4,5,
   5,6,7、1,2,3,4,


49人でやってるけど

縦に7人でやる  横に1つづらして 縦に7人

横に7人  縦にずらして  横に7人

これで4回分
    • good
    • 1
この回答へのお礼

早速のご回答、ありがとうございます!

なるほど!とてもわかりやすいです!!
私には思いつきませんでした;

この方法でグループ分けをさせてもらいます。
知恵を貸して頂き、ありがとうございました!

お礼日時:2011/05/08 23:10

EXCELを使います。



まず1列たてに,1から50まで入力します。
次にこの右の列に対して,メニューバー(一番上のファイルとか編集とか書かれたバー)から,
挿入→関数と進み,乱数発生関数RANDで乱数を入力します。
  
挿入で,関数の項目からRANDを選んでも良いし,最初から=RAND()と入力しても良い。()内は何も入れなくて良い。

例えば,A,B列に次のような感じ。

A    B 
1 0.898420725←ここに=RAND()
2 0.576227901
3 0.871182139
4 0.880668955
5 0.530746793
6 0.897364073
7 0.818495518
8 0.053896693
.   .
.   .
.   .
50  0.772606844

次に,A,B列をクッリクしてこの2列全体データを選択しておく。

それから,メニューバーの,データ→並び替え,と選んで,最優先されるキーを列Bに設定。
順序は,昇順でも降順でも良い。
OKを押して,並び替え実行すると

例えば,
27 0.947858977
40 0.364132549
43 0.564090323
36 0.828878141
32 0.689359751
6 0.083547019
50 0.834041703
7 0.304963151
.   .
.   .
.   .
49 0.413441053
12 0.670362547

のようになる。

この際,結果は,昇順でも降順でもない(大きい順でも小さい順でもない)が,それは,クリックするたびに,

RAND関数の値が変化してしまうため。

しかし,左列の1~50がランダムに変わるので問題ない。

A,B列を選択したまま,何度でもOKを押せば,そのたびに,ランダムに左列の並びが変わる。
こうして,上から7人づつ順にとっていけば良い。

実験用にランダムな順序でサンプルを選択するときの一方法です。

数学的に厳密に言えば,乱数ではない,ようですが,実用上問題ない。
    • good
    • 3
この回答へのお礼

ありがとうございます!!
エクセルを使って、乱数を発生させるのですね!
とても参考になりました。
試してみたいと思います。

お礼日時:2011/05/08 23:06

  1,2,3、


  4,5,6、
  7,8,9

   1-6-8
  2-4-9
   3-5-7
斜めに選んでいく

反対の斜めもあるので
   3-4-8
   2-6-7
  1-5-9
2とおりあります
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q重複しないグループ分けをエクセルで

excel2010を使用しています。

1~9までを3つずつ3グループに分ける作業を4回行い、4回とも重複しないようにしたいのですが、エクセルの関数でうまく重複を避ける方法があるのでしょうか?

        Aグループ Bグループ Cグループ
1回目    1-2-3  4-5-6  7-8-9
2回目    1-4-7  2-5-8  3-6-9
3回目    ・・・
4回目    ・・・

のようにすべての回で重複しないようにしたいと思っています。
9つを3つずつ・・・は手書きでもなんとかなると思いますが
1~12を4つずつ3グループに重複しないで・・・
1~15を5つずつ3グループに重複しないで・・・
1~18を6つずつ3グループに重複しないで・・・
というように応用したいと思いますので、ぜひエクセルの関数かVBAのプログラムで作成できるようにしたいと思っていますが、どのような関数をどのように使えばいいのかわからず困っています。


どなたかご教授いただけないでしょうか。
  

Aベストアンサー

1~9なら重複なし、12なら重複1まで、15なら重複2まで、…24なら重複6までOKとして作ってみました。
並び替えに乱数を使っている手抜き版ですが、取りあえず動きます。
数値をB2セル以降に入れています。

コードが長くなったのとあまりに手抜きで恥ずかしいので、細かい説明は省略します。

Public nGroupData()
Public nRow As Integer
Sub test()
  Dim nTarget()
  Dim nMax As Long
  Dim nCount
  ReDim nGroupData(11)
  
  nRow = 1
  '対象配列を作成
  nMax = 9 '3で割り切れる数(9~24)。9以外にする場合はここを変更
  ReDim nTarget(nMax - 1)
  For i = 0 To (nMax - 1)
    nTarget(i) = i + 1
  Next i
  
  nCount = 0
  Do While nRow <= 4
    '配列をシャッフル
    nTarget = fShuffle(nTarget)
    
    '配列に重複が無いか確認
    If fChkTarget(nTarget) = True Then
      '重複なしならシート上に反映
      nTarget = fSortTarget(nTarget)
      For i = 0 To (nMax - 1)
        Cells(nRow + 1, i + 2) = nTarget(i)
      Next i
      nRow = nRow + 1
    Else
      nCount = nCount + 1
      '乱数に頼っているので1000回やっても重複なしにならなかったらGiveUp
      If nCount >= 1000 Then
        MsgBox ("GiveUP!")
        Exit Sub
      End If
    End If
  Loop
End Sub

' 配列をシャッフル
Private Function fShuffle(list)
  For i = 0 To UBound(list)
    Randomize Second(Now())
    nRn = Int(UBound(list) * Rnd)
    nTmp = list(i)
    list(i) = list(nRn)
    list(nRn) = nTmp
  Next i
  fShuffle = list
End Function

'グループ内でソート
Private Function fSortTarget(nTarget)
  Dim nGroup
  Dim nGrCount As Long
  Dim nWork(2)
  nGrCount = (UBound(nTarget) + 1) / 3
  For i = 0 To 2
    nSwap = 1000
    Do While nSwap <> 0
      nSwap = 0
      For j = (i * nGrCount) To ((i + 1) * nGrCount - 2) Step 2
        If nTarget(j) > nTarget(j + 1) Then
          nSwap = nTarget(j)
          nTarget(j) = nTarget(j + 1)
          nTarget(j + 1) = nSwap
        End If
      Next j
      For j = (i * nGrCount + 1) To ((i + 1) * nGrCount - 2) Step 2
        If nTarget(j) > nTarget(j + 1) Then
          nSwap = nTarget(j)
          nTarget(j) = nTarget(j + 1)
          nTarget(j + 1) = nSwap
        End If
      Next j
    Loop
    nGroup = 0
  Next i
  fSortTarget = nTarget
    
End Function

'重複をチェック
Private Function fChkTarget(nTarget) As Boolean
  Dim nWorkOne
  Dim nGrCount As Long
  Dim nWork(2), nChk, sChk
  fChkTarget = False
  
  nGrCount = (UBound(nTarget) + 1) / 3
  For i = 0 To 2
    nWorkOne = 0
    For j = 1 To nGrCount
       nWorkOne = nWorkOne + 2 ^ (nTarget(i * nGrCount + j - 1) - 1)
    Next j
    
    '重複していない個数を確認
    For k = 0 To ((nRow - 1) * 3 - 1)
      '検査対象と、今までのグループのデータでxorを取る
      nChk = (nWorkOne Xor nGroupData(k))
      sChk = fDec2Bin(nChk) '01の2進数文字列(24文字)に変換
      sChk = Replace(sChk, "0", "") '「0」を削除
      '1の個数=比較して重複していない個数
      '1の個数が規定より少なければ重複と判断
      If Len(sChk) < nGrCount Then Exit Function
    Next k
    nWork(i) = nWorkOne
  Next i
  For i = 0 To 2
    nGroupData(3 * (nRow - 1) + i) = nWork(i)
  Next i
  fChkTarget = True
End Function

'10進数を2進数のStringに変換
Private Function fDec2Bin(nData) As String
  '10進数を2進数のStringに変換(Max2^24)
  Dim nDataInt(2), i
  Dim sAns As String
  
  nDataInt(0) = Int(nData / (65536))
  nDataInt(1) = Int((nData Mod 65536) / 256)
  nDataInt(2) = nData Mod 256
  For i = 0 To 2
    sAns = sAns & Application.WorksheetFunction.Dec2Bin(nDataInt(i), 8)
  Next i
  fDec2Bin = sAns
End Function

1~9なら重複なし、12なら重複1まで、15なら重複2まで、…24なら重複6までOKとして作ってみました。
並び替えに乱数を使っている手抜き版ですが、取りあえず動きます。
数値をB2セル以降に入れています。

コードが長くなったのとあまりに手抜きで恥ずかしいので、細かい説明は省略します。

Public nGroupData()
Public nRow As Integer
Sub test()
  Dim nTarget()
  Dim nMax As Long
  Dim nCount
  ReDim nGroupData(11)
  
  nRow = 1
  '対象配列を作成
  nMax = 9 '3で割り切れる数(9~24...続きを読む

Qエクセルで公平にチーム分けする方法を教えて下さい

20人のメンバーを2チームに分け毎週スポーツの練習をしています。毎回公平にチームメンバーが入れ替わる様にエクセルで設定してチーム分けのメンバー表を作りたいのですが、ご存じの方教えてください。

Aベストアンサー

他の方もご指摘されていますように、「公平」の意味がよく分かりませんが
「同じ組み合わせが無いように」という理解で考えてみました。
乱数を使用する方法では、低確率ですが同じ組み合わせが発生し得ます。

※以下Excel2007以降のバージョンでやって下さい。

メンバー20名の名前を横にA1セル~T1セルへ入力します。
[F11]キーを押して、左上のプロジェクトエクスプローラーからSheet1(Sheet1)を
Wクリックします。
右側のエディタエリアに以下のコードを貼り付けます。

Sub sample()
rIdx = 1
For i1 = 1 To 20
For i2 = i1 + 1 To 20
For i3 = i2 + 1 To 20
For i4 = i3 + 1 To 20
For i5 = i4 + 1 To 20
For i6 = i5 + 1 To 20
For i7 = i6 + 1 To 20
For i8 = i7 + 1 To 20
For i9 = i8 + 1 To 20
For i10 = i9 + 1 To 20
rIdx = rIdx + 1
Cells(rIdx, i1).Value = "A"
Cells(rIdx, i2).Value = "A"
Cells(rIdx, i3).Value = "A"
Cells(rIdx, i4).Value = "A"
Cells(rIdx, i5).Value = "A"
Cells(rIdx, i6).Value = "A"
Cells(rIdx, i7).Value = "A"
Cells(rIdx, i8).Value = "A"
Cells(rIdx, i9).Value = "A"
Cells(rIdx, i10).Value = "A"
For i = 1 To 20
If Cells(rIdx, i).Value <> "A" Then Cells(rIdx, i).Value = "B"
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
MsgBox ("終了しました")
End Sub

[F5]を押して実行します。
お使いのPCの能力にもよりますが、終わるまでに数分かかります。

この結果が『20名をA・Bチームに分ける全ての組み合わせ』です。
これを上から順にやれば重複無くチーム分けを行えます。

ただ、実際問題として、全ての組み合わせは18万4756通りあり、全ての
組み合わせを試すには1日1通りならば500年以上かかることになりますが。

他の方もご指摘されていますように、「公平」の意味がよく分かりませんが
「同じ組み合わせが無いように」という理解で考えてみました。
乱数を使用する方法では、低確率ですが同じ組み合わせが発生し得ます。

※以下Excel2007以降のバージョンでやって下さい。

メンバー20名の名前を横にA1セル~T1セルへ入力します。
[F11]キーを押して、左上のプロジェクトエクスプローラーからSheet1(Sheet1)を
Wクリックします。
右側のエディタエリアに以下のコードを貼り付けます。

Sub sample()
rIdx = 1
For i1 = 1...続きを読む

Q重複しないグループ分けについて

https://oshiete.goo.ne.jp/qa/8843774.html

で質問してプログラムを組んでくれた方がいましたが
応用できない場面が出てきてしまったので再び質問させて
いただきます。

前回の質問ではすべて3グループに分けられるように
していただきましたが、実はグループ数を固定するのではなく
1グループの人数を3人に固定しなければならなかったのです。

前回回答していただいたVBAのプログラムを編集して
1~12までを3ずつ4グループになるべく重複をしないで
複数回、分けるにはどうしたらいいでしょうか?
できれば複数回分けたところで全部の数が最低1回は同じ
グループに入るようにできると助かります。

今回も1-2-12と1-2-11は重複と考えます。

まったく重複なしで行うのは不可能だということは
わかりますが、できるだけ少ない重複で複数回(今回は最低6回)のグループ分け
を行いたいと思います。

前回のプログラムに説明も付け加えていただきましたが
よく理解できずに今日まできてしまいました。
大変申し訳ありませんがどうかご教授お願いします。

https://oshiete.goo.ne.jp/qa/8843774.html

で質問してプログラムを組んでくれた方がいましたが
応用できない場面が出てきてしまったので再び質問させて
いただきます。

前回の質問ではすべて3グループに分けられるように
していただきましたが、実はグループ数を固定するのではなく
1グループの人数を3人に固定しなければならなかったのです。

前回回答していただいたVBAのプログラムを編集して
1~12までを3ずつ4グループになるべく重複をしないで
複数回、分けるにはどうしたらいい...続きを読む

Aベストアンサー

【つづき】

上記で出来上がった表を元に、組合せパターン数の表を作成するもの
#7後半にもありましたが、その表の右側に 1_2_3 の様な表示を追加しています。
#7後半のものでも構いません。

Public Sub CheckPtn()
  Dim dicPtn As Object
  Dim vA As Variant, vB As Variant, v As Variant
  Dim i As Long, j As Long, k1 As Long, k2 As Long
  Dim iGrp As Long
  Dim vS As Variant, sS As String

  Set dicPtn = CreateObject("Scripting.Dictionary")
  With Range("B2")
    vA = .CurrentRegion.Value
    iGrp = .Cells(1).MergeArea.Count
    ReDim vB(1 To UBound(vA, 2) + 1, 1 To UBound(vA, 2) + 1)
    vB(1, 1) = "組"
    For i = 2 To UBound(vB)
      vB(1, i) = i - 1
      vB(i, 1) = i - 1
      vB(i, i) = "A"
    Next
    For i = 2 To UBound(vA)
      If (Val(vA(i, 1)) > 0) Then
        For j = 1 To UBound(vA, 2) Step iGrp
          sS = ""
          For k1 = 0 To iGrp - 2
            sS = sS & "_" & vA(i, j + k1)
            For k2 = k1 + 1 To iGrp - 1
              vB(vA(i, j + k1) + 1, vA(i, j + k2) + 1) = _
                vB(vA(i, j + k1) + 1, vA(i, j + k2) + 1) + 1
              vB(vA(i, j + k2) + 1, vA(i, j + k1) + 1) = _
                vB(vA(i, j + k2) + 1, vA(i, j + k1) + 1) + 1
            Next
          Next
          sS = sS & "_" & vA(i, j + k1)
          sS = Mid(sS, 2)
          dicPtn(sS) = dicPtn(sS) + 1
        Next
      End If
    Next
    With .Offset(UBound(vA) + 2)
      .CurrentRegion.Clear
      With .Resize(UBound(vB), UBound(vB))
        .Value = vB
        On Error Resume Next
        .Cells.SpecialCells(xlCellTypeBlanks) _
          .Interior.ColorIndex = 38
        .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1) _
          .SpecialCells(xlCellTypeConstants _
                  , xlTextValues).ClearContents
        .Columns(1).Interior.ColorIndex = 36
        .Rows(1).Interior.ColorIndex = 36
        .Borders.LineStyle = xlContinuous
        .HorizontalAlignment = xlCenter
        .EntireColumn.AutoFit
      End With
      
      ReDim vS(1 To dicPtn.Count, 1 To 2)
      i = 1
      For Each v In mySort2(dicPtn.Keys)
        vS(i, 1) = Join(v(1), "_")
        vS(i, 2) = dicPtn(v(0))
        i = i + 1
      Next
      With .Offset(, UBound(vB) + 1)
        .CurrentRegion.Clear
        With .Resize(dicPtn.Count, 2)
          .Value = vS
          .Borders.LineStyle = xlContinuous
        End With
      End With
    End With
  End With
  Set dicPtn = Nothing
End Sub

Private Function mySort2(ByVal vA As Variant) As Variant
  Dim vR As Variant, vS As Variant, v As Variant
  Dim i As Variant, j As Variant, k As Long, n As Long

  ReDim vR(LBound(vA) To UBound(vA))
  For i = LBound(vA) To UBound(vA)
    vS = Split(vA(i), "_")
    For j = 0 To UBound(vS) - 1
      For k = j + 1 To UBound(vS)
        If (Int(vS(j)) > Int(vS(k))) Then
          v = vS(j)
          vS(j) = vS(k)
          vS(k) = v
        End If
      Next
    Next
    vR(i) = Array(vA(i), vS)
  Next
  For i = LBound(vR) To UBound(vR) - 1
    For j = i + 1 To UBound(vR)
      For k = 0 To UBound(vS)
        If (Int(vR(i)(1)(k)) < Int(vR(j)(1)(k))) Then
          n = 0
          Exit For
        ElseIf (Int(vR(i)(1)(k)) > Int(vR(j)(1)(k))) Then
          n = 1
          Exit For
        End If
      Next
      If (n > 0) Then
        v = vR(i)
        vR(i) = vR(j)
        vR(j) = v
      End If
    Next
  Next
  mySort2 = vR
End Function

※ mySort2 は、文字列で与えられたものを1度バラして・・・ってやってます
(元々数値の表側を見ればもっと少ない記述になりますが)

【つづき】

上記で出来上がった表を元に、組合せパターン数の表を作成するもの
#7後半にもありましたが、その表の右側に 1_2_3 の様な表示を追加しています。
#7後半のものでも構いません。

Public Sub CheckPtn()
  Dim dicPtn As Object
  Dim vA As Variant, vB As Variant, v As Variant
  Dim i As Long, j As Long, k1 As Long, k2 As Long
  Dim iGrp As Long
  Dim vS As Variant, sS As String

  Set dicPtn = CreateObject("Scripting.Dictionary")
  With Range("B...続きを読む

Qエクセル 名簿でランダムに

お世話になります。

エクセル上の名簿(59人)でランダムに9グループ(7人を5グループ、6人を4グループ)に分けたいと思います。

マンネリを避けるためにランダムで組みたいと思いますが、エクセルの機能で良い具合にグループ分けをしてくれる機能は、ないでしょうか。

どなたかお詳しい方、よろしくお願いします。

Aベストアンサー

1.範囲 F2:F60 に59人の名前を入力
2.セル E2 に式 =RAND() を入力して、此れを下方にズズーッとドラッグ&ペースト
3.セル C2 に式 =VLOOKUP(SMALL(E$2:E$60,ROW(A1)),E$2:F$60,2,FALSE) を入力して、
  此れを下方に(セル C60 まで)ズズーッとドラッグ&ペースト
4.グループ分けは次のようにすればよろしいかと
   7人グループ1 → C2:C8
   7人グループ2 → C9:C15
   7人グループ… → ………
   7人グループ5 → C30:C36
   6人グループ1 → C37:C42
   6人グループ2 → C43:C48
   6人グループ3 → C49:C54
   6人グループ4 → C55:C60

Qエクセル メンバー表からグループメンバーを抽出

縦に名前が並び、その横の列に男女、その横の列にA・B・Cの3グループが入力されている表があります。
その表からAグループ・Bグループ・Cグループのメンバーを抽出して各グループのメンバー表を作成したいです。

条件として…
(1)今後メンバーが増える可能性がある。
(2)メンバーの所属グループは変更になる。
(3)グループの人数構成はバラバラである。
(4)メンバー表の名前は上から縦に並べたい。
(5)メンバー表はそれぞれ別シートに作成したい。
(6)ABどちらかに所属する男性のみ(女性のみ)のグループのメンバー表も作成したい。

毎日作成するので日々の手間を最小限にしたいです。
関数等を利用して一発で表作成することはできないでしょうか?

よろしくお願いします。

Aベストアンサー

関数案については、既に回答が出ていますが
さて、提示された関数をご理解できましたでしょうか。
条件が変更されたときに、ご自身で式を変更するには
意外と、VBA以上の知識が必要な位複雑な式です。
別案ですが、フィルターオプション の機能を紹介しておきます。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm
のサイトを参考にしてください。
機能を理解できれば、色々な応用が可能です。
毎日、実行するのであれば、一度、マクロの記録を実行すればよいです。
記録される内容は、ほんの1行ですので、VBAを理解するのも楽です。

Qエクセルの班分け名簿

エクセル2000を使っています。

シート1に名簿を作っていて、その名簿の一人一人を班分けしています。

 A  B  C
1班 A子 090-xxx-xxxx
2班 B子 090-xxx-xxxx
1班 C子 090-xxx-xxxx
3班 D子 090-xxx-xxxx
 ・・・・・

シート2には1班の人だけ
シート3には2班の人だけ・・・
といったように、自動的にリンクさせる方法はないでしょうか?

300名ぐらいの名簿なので、いちいちオートフィルで抜き出してコピーするのが大変なのです。

教えてください!!

Aベストアンサー

これで最後にします。(本当に申し訳ありません)
配列数式は再計算に時間が掛かりそうなので、
配列数式を使わないようにしました。
こちらは後から挿入しても大丈夫だと思いますし、
シート1の1行目以外なら追加しても削除しても問題ないと思います。
B1セルに
1班

A2セルに
=MATCH($B$1,Sheet1!$A:$A,0)

A3セルに
=MATCH($B$1,OFFSET(Sheet1!$A$1,A2,0,65536-A2,1),0)+A2
A4セル以降は、A3セルをコピー貼り付け

B2セルに
=IF(ISERROR($A2),"",OFFSET(Sheet1!B$1,$A2-1,0))
右にコピー貼り付け
下にコピー貼り付け

前の回答は、A列にエラーが出ないようにしてあったのですが、
データが無くなると#N/A
シート1の最終行(65536行)に入力すると#REF!というエラーが出ます。
(すべて表示はされます。)
A列で数式にエラー処理を入れると長くなるので、
B列以降の数式で対応するようにしてあります。
A列は非表示にして下さい。

A2セルとA3セルの数式が変わってしまったので、
一気にコピー貼り付けできなくなってしまいましたが、
再計算処理は、配列数式を使うより、早いと思います。

普通の数式ですので、関数を調べて頂けば分かると思いますが、
もし、説明が必要なら補足してください。
(#5でも分かる通り、うまく説明できないと思いますが)
その時には、またお邪魔させて頂きます。

いろいろテストしてみたつもりですが、間違えていたらすみません。

これで最後にします。(本当に申し訳ありません)
配列数式は再計算に時間が掛かりそうなので、
配列数式を使わないようにしました。
こちらは後から挿入しても大丈夫だと思いますし、
シート1の1行目以外なら追加しても削除しても問題ないと思います。
B1セルに
1班

A2セルに
=MATCH($B$1,Sheet1!$A:$A,0)

A3セルに
=MATCH($B$1,OFFSET(Sheet1!$A$1,A2,0,65536-A2,1),0)+A2
A4セル以降は、A3セルをコピー貼り付け

B2セルに
=IF(ISERROR($A2),"",OFFSET(Sheet1!B$1,$A2-1,0))
右にコピー貼...続きを読む

QExcelでの全通りの組み合わせ出力方法(文字列)

Excelについて全くの初心者で、教えて頂きたい質問があります。

Excelの文字列の全通りの組み合わせを出力がしたいのですが、その方法が分かりません。
例えばセルAに
・りんご
・みかん
・いちご

セルBに
・だいこん
・キャベツ
・トマト

があり、別のセルにその全通りの組み合わせを出力
(文字と文字の間はスペース)

りんご だいこん
りんご キャベツ
りんご トマト
みかん だいこん
みかん キャベツ
みかん トマト
いちご だいこん
いちご キャベツ
いちご トマト

この様に出来る方法はあるでしょうか?
また出来ればその裏(だいこん りんご)も出力したいと考えており、キーワードは3つまで出来るようになりたいです。

どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

Aベストアンサー

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行からB列最終行まで繰り返し
x = x + 1
Cells(x, "C") = Cells(i, "A") & " " & Cells(n, "B") 'C列に結合して転記
Next n
Next i
End Sub

3.Alt+F11キーでワークシートへもどります.

4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行

これでできます。
これがわかれば「裏」というのも簡単ですよね。
以上はVBAでの回答ですが、外していたらごめんなさい。

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行...続きを読む

Q得点をもとにチーム分け

小学校の教員をしている者なのですが・・・
体育などでいろいろなタイムや得点をもとにチーム分けをしなければならない場面が多々あります。
そんな時,excelで上手くチーム分けをする方法ってあるのでしょうか?

ちょっと具体的には
 A~Xまで24人の児童の50m走のタイムをもとに,走力が均等になるよう1チーム6人のチームを4つ作りたい場合,チームの合計タイムが [A~Xの平均タイム]×6 に最も近くなるようにA~Xを4つに割り振るようなことが,関数やマクロ(?)でできたりするのでしょうか。

もしこれができるなら本当に助かります。excelでできない場合も何かツールのような物でできればよいのですが・・・検索してみても思うような物が見つけ出せませんでした。

どなたか詳しい方,ご回答よろしくお願い致します。

Aベストアンサー

2通りやって見ました。
予想以上に差が出ました。

1)早い順にabcd 4チームに分ける
A列に名前、B列にタイムを入力
並び替えでタイムを優先
C列にチームabcdを繰り返し入力
並び替えでチームを優先
結果:チーム別平均にかなりの差が出来てしまいました。

2)一番早い子と一番遅い子を組み合わせる
A列に名前、B列にタイムを入力
並び替えでタイムを優先
C列12番目までにチームabcdを繰り返し入力
C列最下位から逆にabcdを繰り返し入力(13番目からはdcbaを繰り返し入力)
並び替えでチームを優先
結果:チーム別平均は近いものになりました。
修正:差のある2チームの各1名を入れ替え平均タイムがそろいました。

添付図参考

Q10人を2人づつ5組にランダムに分けて表示したい。

AからJまでの10人を1組2人づつに分ける組み合わせは
COMBIN(10,2)+COMBIN(8,2)+COMBIN(6,2)+COMBIN(4,2)=94通り
と思われますが、これら94の組み合わせの中から、任意の1つをランダムに表示出来るようにしたい、できればEXCEL(関数またはマクロ)で。
よろしくお願いいたします。

Aベストアンサー

>ランダムな順に10人をピックアップ」も人手ではなくパソコンでやって
>ほしいのです。

他の方の回答も含めて、そのつもりで回答されていると思いますけれど、何を人手でやるおつもりなのでしょうか?
マクロでやるならその通りの処理をOpenイベントで実行すればできますし、関数利用でも別に難しいことではありません。

関数の場合の一例を、説明した手順通りに分解して表示するなら…
A1~J1に対象となる名前があるとして
A2に =RAND()               :順番のもとになる乱数
A3に =RANK(A2,$A2:$J2)        :乱数を元に順番付け
A4に =MATCH(COLUMN(),$A3:$J3,0) :順に並べた時の対称の列番号
A5に =INDEX($A1:$J1,A4)        :乱数の順に並べ替えた名前
を入力して、A2~A5を選択して、右にコピーフィル。
5行目に乱数順に並べ替えた名前が表示されます。
(組み合わせは先頭から2人ずつ)

計算の手順がわかるように、1行ずつに途中経過を表示していますが、実際は途中を省略できますので、あとは適当にアレンジしてください。

(注意)Rankを使用しているので、乱数値がたまたままったく同じ値だとうまくいきませんが、RANDは実数になるので、そのようなことが起こる確率は非常に少ないと考えてよいとしています。

>ランダムな順に10人をピックアップ」も人手ではなくパソコンでやって
>ほしいのです。

他の方の回答も含めて、そのつもりで回答されていると思いますけれど、何を人手でやるおつもりなのでしょうか?
マクロでやるならその通りの処理をOpenイベントで実行すればできますし、関数利用でも別に難しいことではありません。

関数の場合の一例を、説明した手順通りに分解して表示するなら…
A1~J1に対象となる名前があるとして
A2に =RAND()               :順番のもとになる乱数
A...続きを読む

Qエクセル入力で項目別にシートに振り分ける方法を教えてください!

エクセルでの入力の時に
シート1では全ての営業所をひとまとめにして入力
シート2以降では営業所別にシートに振り分ける方法がわかりません。

シート1(入力するシート)
1 営業所名  支出金額  項目
2 群馬支部  11980  雑費
3 長野支部  12080  交通費
4 群馬支部  19800  接待交際費
5 新潟支部  19800  接待交際費

シート2(群馬支部)
1 営業所名 支出金額 項目
2 群馬支部 11980 雑費
4 群馬支部 19800 接待交際費

入力する場所はシート1のみで
シート2、3は営業部ごとの項目になっていて
シート1に入力すると自動で各シートに
振り分けられるようにしたいのです。

これを解決できる方法とは、どのような方法があり
そしてどうやれば出来るのでしょうか?

お時間あるときにご返答頂けると嬉しいです。
どうぞよろしくお願い致します。

Aベストアンサー

関数のみで行う場合です。

シート1(入力するシート)
 A  B       C       D
1 No. 営業所名  支出金額  項目
2 1 群馬支部   11980    雑費
3 2 長野支部   12080    交通費
4 3 群馬支部   19800    接待交際費
5 4 新潟支部   19800    接待交際費

VLOOKUP関数で処理するのでA列にNo.を入れてください。
ちなみにA2以降のA列に
  =ROW()-MATCH("No.",A:A,0)
と入れると並べ替えをしても行番号が変わりません。

シート2(群馬支部)
  A B        C      D       E
1   営業所名 データ数 総データ数
2   群馬支部   2      4
3 
4                           行番号
5 No. 営業所名 支出金額 項目       0
6  1  群馬支部  11980   雑費       1
7  2  群馬支部  19800   接待交際費  3
8  3                          #N/A

各セルに次の関数を入れます。
B2:営業所名
   ここをリスト化すると1枚のシートで全営業所が計算できます。
C2:=COUNTIF(Sheet1!B:B,A2)
   群馬支部のデータ数を求める
D2:=MAX(Sheet1!A:A) or =COUNTA(Sheet1!B:B)-1
   総データ数を求める
D5:0
D6:=MATCH($A$2,INDIRECT("Sheet1!$B$"&TEXT(E5+2,"0")&":B"&TEXT($C$2+1,"0")),0)+E5
   非常に面倒な式ですが、シート1における営業所名の出現行を
   MATCH関数で出しています。単純に組むと一番始めしか出て来な
   いので次の行では前行で見つけたシート1での出現行の次から
   検査する必要があります。
   そのためINDIRECT関数で可変する範囲を設定しています。
A6:連番(シート1と同じ)
B6:=IF(ISERROR($E6),"",VLOOKUP($E6,Sheet1!$A:$D,2,FALSE))
   VLOOKUP関数で必要データを取り出します。
   データがなくなるとE列の行番号がエラーになるので、そこは
   表示しない(空白)ためのif文を加えてあります。
   後は必要行コピーすれば完成です。

 

関数のみで行う場合です。

シート1(入力するシート)
 A  B       C       D
1 No. 営業所名  支出金額  項目
2 1 群馬支部   11980    雑費
3 2 長野支部   12080    交通費
4 3 群馬支部   19800    接待交際費
5 4 新潟支部   19800    接待交際費

VLOOKUP関数で処理するのでA列にNo.を入れてください。
ちなみにA2以降のA列に
  =ROW()-MATCH("No.",A:A,0)
と入れると並べ替えをしても行番号が変わりません。

シート2(...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング