Hallo Stephan,
OK, da scheint doch noch ein winziger Bug drin zu sein. Offenbar hast du auch y Werte denen in Spalte A kein Wert zugeordnet ist. Diese werden richtigerweise nicht in das Array geschrieben. Aber das Array sieht beim Redimensionieren dennoch Plätze für diese Werte vor, da yvorh die Anzahl aller y-Werte ist. Das heißt dass im weiteren Verlauf diese leeren Plätze ebenfalls mit in die Zufallsbewertung eingehen. Es gibt zwei Wege dies zu lösen. Such dir einen aus.
Der einfachste Weg: Ersetze yvorh und pvorh wie folgt.
1 2 | yvorh = Application.WorksheetFunction.CountIfs(Quelle.Columns(13), "y" , Quelle.Columns(1), "<>" & "" )
pvorh = Application.WorksheetFunction.CountIfs(Quelle.Columns(13), "p" , Quelle.Columns(1), "<>" & "" )
|
Winzig kleiner Nachteil dabei. yvorh entspricht nun nicht mehr der tatsächlichen Anzahl vorhandener y-Werte sondern der Anzahl von y-Werten, die auch einem Wert in spalte A zugeordnet ist. Dafür wird aber das Array korrekt dimensioniert und nimmt nur noch die interessanten Werte auf.
Falls du es aber vorziehst yvorh doch mit der tatsächlichen Anzahl vorhandener y-Werte gleichzusetzen, dann lasse yvorh wie es ist und setze die Einschränkungen an anderer Stelle: Also bei Loop Until yarr(zufall, 2) = "" And yarr(zufall, 1) <> "" sowie
If yarr(zufall, 1) <> "" Then
ziel.Cells(z3, s3) = yarr(zufall, 1)
s3 = s3 + 1
End If
und nochmal bei
For i = 1 To yvorh
If yarr(i, 2) = "" And yarr(i, 1) <> "" Then
Das gleiche dann natürlich auch für parr
Ich empfehle den ersten, weil einfachen Weg oben!
Ps: wie du sicher bereits bemerkt hast wird in die erste Spalte des Arrays yarr(i,1) der Wert aus Spalte A geschrieben und in der zweiten Spalte yarr(i,2) wird vermerkt ob dieser Wert vom Zufallsgenerator bereits gezogen wurde.
Wenn weitere Fragen sind. einfach melden.
Gruß Mr. K.
|