/ / Excel - 列の基準に基づいて、重複や繰り返しのない、ランダムに行を選択 - excel、vba、excel-vba

Excel - 列の基準に基づいて重複/繰り返しなしでランダムに行を選択する - Excel、Excel、Excel、Excel

私はこのリストをウェブサイトからインポートしています(そして随時更新します):最初の列(A)は姓、2番目の列(B)は姓、3番目の列(c)は会社名です。

特定の会社に基づいて(姓、名、会社名を含む)行をランダムに選択します。

そして今や注意が必要なのは、(名前、姓)を次にランダムに選択してはいけません。

回答:

回答№1は0

これには2つのステップがあります。

  1. 特定の会社の人々のリストを集める
  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の人々となり、繰り返しはありません。