Ich habe Probleme beim Schreiben ein wenig VBA-Code und bin auf der Suche nach Vorschlägen, wie zu vervollständigen.Verteilen Sie die Namen gleichmäßig auf Zeilen basierend auf Countif
Mein Datensatz enthält eine Spalte mit Kategorien, die A, B oder C sein können. Die Anzahl der Zeilen wird immer variieren. Sobald ich die Kategorien auf ein Array setze, das ich durchlaufen möchte, suche ich den Wert für eine Tabelle auf einer anderen Registerkarte, aber wenn die Kategorie C ist, muss ich die Anzahl der Zeilen zählen, die C enthalten, und diese Zeilen gleichmäßig an eine Liste von Mitarbeiternamen verteilen innerhalb der Tabelle. Die Suche nach Kategorie A & B funktioniert jetzt. In der Tabelle & konnten Zeilen mit Kategorie C gezählt werden. Sie wissen nicht, wie Sie die Namen der Mitarbeiter korrekt in Zeilen bis zur "CntPerStaff" -Nummer einfügen und dann in der Tabelle auf den nächsten Angestelltennamen wechseln.
Dim LastRow As Long, i As Long
Dim Arr1 As Variant, Arr2 As Variant
'Finds last row in data set
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
'Set data columns to arrays
Arr1 = Range("AP2:AP" & LastRow).Value 'Category
Arr2 = Range("AQ2:AQ" & LastRow).Value 'Employee
For i = 1 To UBound(Arr1)
If Arr1(i, 1) = "A" Then
Arr2(i, 1) = Application.WorksheetFunction.VLookup("A", Worksheets("Tables").Range("CATEGORYID"), 2, False)
ElseIf Arr1(i, 1) = "B" Then
Arr2(i, 1) = Application.WorksheetFunction.VLookup("B", Worksheets("Tables").Range("CATEGORYID"), 2, False)
Else 'Need to insert countif functionality
End If
Next i
'Place employee name array into spreadsheet
Range("AQ2").Resize(UBound(Arr2, 1), 1).Value = Arr2
Das ist, was ich bisher auf dem countIf Code haben:
Dim Count As Variant, CntPerStaff As Variant, Arr1 As Variant
Dim LastRow As Long, i As Long, Cnt As Long, Staff As Long, CntStart As Long
'Finds last row in data set
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Cnt = WorksheetFunction.CountIf(Range("AP2:AP" & LastRow), "C")
Staff = WorksheetFunction.CountIf(Worksheets("Tables").Range("CATEGORYID"), "C")
CntPerStaff = WorksheetFunction.RoundUp(Cnt/Staff, 0)
Example of Table and Data (red is info which macro will output)