mein Projekt soll nicht-ideale Gasbewegung vorherzusagen, also schrieb ich diesen Code, um jedem Molekül eine bestimmte Zahl zu geben, aber es wiederholt Zahlen wiederholt (ich benutzte randbetween) wie change ich es also nicht Wiederhole die gleiche Nummer?Gas Verhalten in VBA
Sub Rand_Number() ‚AACO 20 àçåæ Ui îñôøé Aiai ÷ åìåú
Dim RandNum As Long
Dim k As Long
Dim Mone As Integer
Mone = 0
Num_molecules = Sheets("Data").Range("A14").Value
RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
For j = 1 To Num_molecules * 0.2
If IsEmpty(Sheets("rand").Cells(1, 1)) = True Then
Sheets("rand").Cells(1, 1) = RandNum
Else
i = 1
'RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
Do 'Until IsEmpty(Sheets("rand").Cells(i, 1)) = True
If Sheets("rand").Cells(i, 1) = RandNum Then
RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
Do Until RandNum = Cells(i, 1) Or IsEmpty(Cells(i, 1)) = True
If RandNum = Sheets("rand").Cells(i, 1) Then
RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
Else
i = i + 1
End If
Loop
ElseIf IsEmpty(Sheets("rand").Cells(i, 1)) = False Then
i = i + 1
Else
Sheets("rand").Cells(i, 1) = RandNum
Exit Do
End If
Loop
End If
Next j
End Sub
Ryan zu finden - diese Implementierung ist schneller, weil es nicht alle eindeutigen Zahlen aus dem Bereich generiert, sondern nur ein Teil davon. Ich habe meine Antwort auf diese Frage aktualisiert, die sowohl Ihre Herangehensweise an das Aussortieren von Fehlern verwendet, als auch das, bis alle Zahlen aus dem Bereich generiert wurden. Es ist immer noch schneller als mit 'Remove'. Ich habe GitHub Gist mit allen dreien verlinkt, um die Leistung zu vergleichen. Die Ergebnisse befinden sich am Ende der Quelldatei. Guck mal! :-) –
@LoganReed. Vielleicht verstehe ich das Problem falsch, aber die Aufzählung aller Zufallszahlen in einem Bereich von 1-10.000 ist nicht das, wonach das OP sucht. Ich denke, was benötigt wird, ist einfach keine Zufallszahl basierend auf N Simulationen zu wiederholen. Wenn wir keine Wiederholungen wollen, warum nicht einfach eine For i = 1 bis 10000 Schleife oder etwas Ähnliches machen? –
Sie haben Recht - ich überlege es wahrscheinlich. OP muss klären. –