Может ли кто-нибудь помочь мне с Excel VBA , чтобы извлечь «Некоторый (x) процентный случайный образец для каждой группы в столбце» на другой лист / Excel.
Образец данных:
Name | Date | Dept | Subject|
Aj | 01/01/19 | Science | PS |
Aj | 01/02/19 | Science | NS |
Raj | 01/01/19 | Maths | Part-1 |
Raj | 01/02/19 | Maths | Part-2 |
Raj | 01/03/19 | Maths | Part-3 |
Baba | 01/01/19 | Social | Bhugol |
Raj | 01/03/19 | Maths | Part-4 |
Итак, если мы выполняем макрос, сначала он должен запросить требуемый процент выборки (например, 25% в этом случае)
Затем желаемый вывод для этогоданные выборки будут выглядеть так:
вывод:
Name | Date | Dept | Subject|
Aj | 01/01/19 | Science | PS |
Raj | 01/01/19 | Maths | Part-1 |
Baba | 01/01/19 | Social | Bhugol |
Здесь данные выбираются на основе столбца Имя . Пожалуйста, помогите мне решить эту проблему, учитывая, что я новичок в Excel VBA.
Это то, что я пробовал:
Sub Extract_25_percent()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rwMax As Long, rw As Long, colMax As Integer
Application.ScreenUpdating = False
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets.Add
ws1.Range("A1").CurrentRegion.Copy ws2.Range("A1")
rwMax = ws2.Range("A1").CurrentRegion.Rows.Count
colMax = ws2.Range("A11").CurrentRegion.Columns.Count + 1
ws2.Cells(1, colMax) = "Random"
For rw = 2 To rwMax
ws2.Cells(rw, colMax) = WorksheetFunction.RandBetween(1, rwMax)
Next rw
ws2.Range("A1").CurrentRegion.Sort Key1:="Random", Order1:=xlAscending, Header:=xlYes
rw = WorksheetFunction.RoundUp((rwMax - 1) / 25, 0) + 1
ws2.Range(Cells(1, colMax), Cells(rwMax, colMax)).ClearContents
ws2.Range(Cells(rw, 1), Cells(rwMax, colMax)).ClearContents
'ws2.Range("A1").CurrentRegion.Sort Key1:="No", Order1:=xlAscending, Header:=xlYes
ws2.Columns.AutoFit
End Sub
Этот код может получить только мнеСлучайный процент без группировки столбца ИМЯ .
Мне нужно получить хотя бы одну позицию для каждой группы в худшем случае ..!