私はこのリストをウェブサイトからインポートしています(そして随時更新します):最初の列(A)は姓、2番目の列(B)は姓、3番目の列(c)は会社名です。
特定の会社に基づいて(姓、名、会社名を含む)行をランダムに選択します。
そして今や注意が必要なのは、(名前、姓)を次にランダムに選択してはいけません。
回答:
回答№1は0これには2つのステップがあります。
- 特定の会社の人々のリストを集める
- ステップ#1で作成したリストをシャッフルする
1000人いるとしましょう。
に E1 会社名を付けます。それで D1 入る:
=IF(C1=$E$1,1,"")
そして D2 入る:
=IF(C2=$E$1,1+MAX($D$1:D1),"")
コピーします。これは人々のための検索キーを生成します。取得する人数を数える E2 入る:
=MAX(D:D)
人を検索するには、 F1 入る:
=IF(ROW()>$E$2,"",INDEX(A:A,MATCH(ROWS($1:1),D:D,0))& " " & INDEX(B:B,MATCH(ROWS($1:1),D:D,0)))
コピーしてください。
ステップ#2では、人を列に収めるためにマクロを実行します。 F、それらをシャッフルし、シャッフルリストをcolumnに配置する G:
Sub createPickList()
Dim N As Long, i As Long
N = Range("E2").Value
ReDim arr(1 To N)
For i = 1 To N
arr(i) = Cells(i, "F").Value
Next i
Call aSort(arr)
For i = 1 To N
Cells(i, "G").Value = arr(i)
Next i
End Sub
Public Sub aSort(ByRef InOut)
Dim i As Long, J As Long, Low As Long
Dim Hi As Long, Temp As Variant
Low = LBound(InOut)
Hi = UBound(InOut)
J = (Hi - Low + 1) 2
Do While J > 0
For i = Low To Hi - J
If InOut(i) > InOut(i + J) Then
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
For i = Hi - J To Low Step -1
If InOut(i) > InOut(i + J) Then
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
J = J 2
Loop
End Sub
あなたの最初のピックはなります G1、次のピックはなります G2等々選ばれた人々はすべてGEの人々となり、繰り返しはありません。