/ / Excel - вибір випадковим чином на основі критеріїв стовпців, без дублікатів / повторів - excel, vba, excel-vba

Excel - випадкове вибору рядка на основі критеріїв стовпців без дублікатів / повторень - excel, vba, excel-vba

У мене є список, імпортований з веб-сайту (і оновлений при нагоді): перший стовпець (А) має ім'я, другий стовпчик (В) - прізвище, а третій стовпчик (с) - назва компанії.

Я хочу випадковим чином вибрати рядок (з іменем, прізвищем та назвою компанії) на основі певної компанії.

А тепер до складної частини: наступного разу (ім’я, прізвище) не слід вибирати випадковим чином.

Відповіді:

0 для відповіді № 1

Ми можемо зробити це в два етапи:

  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, перетасуйте їх і помістіть перетасований список у стовпчик 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, і повторів не буде.