Wie schreibe ich einen VBA-Code, der 10 Zufallszahlen zwischen 1 und 50 ohne Wiederholung der Zahlen anzeigt?

509
Mr Ashley

Wie schreibe ich einen VBA-Code, der 10 Zufallszahlen zwischen 1 und 50 ohne Wiederholung der Zahlen anzeigt?

-1
Willkommen bei Super User. Wir sind kein Skriptschreibservice. Wir erwarten von den Anwendern, dass sie uns mitteilen, was sie bisher ausprobiert haben (einschließlich der von ihnen verwendeten Skripts) und wo sie stecken bleiben, damit wir bei bestimmten Problemen helfen können. Fragen, die nur nach Skripts fragen, sind zu umfangreich und wahrscheinlich [gehalten oder geschlossen] (http://stackoverflow.com/help/closed-questions). Bitte lesen Sie [Wie stelle ich eine gute Frage?] (Http://superuser.com/help/how-to-ask). DavidPostill vor 8 Jahren 1
Ist das Hausaufgaben? DavidPostill vor 8 Jahren 0

2 Antworten auf die Frage

0
Gary's Student

In B1 bis B50 geben Sie ein:

 =RAND() 

In A1 geben Sie ein:

=MATCH(LARGE(B:B,ROW()),B:B,0) 

und über A10 abschreiben :

Schreiben Sie einfach ein kurzes Makro, um die Formeln einzufügen. Wenn Sie die Arbeitsblattmethode nicht verwenden möchten, gilt Folgendes:

Sub WillNotRepeat() Dim ndex(1 To 50) For I = 1 To 50 ndex(I) = I Next I  Call Shuffle(ndex)  For I = 1 To 10 msg = msg & ndex(I) & vbCrLf Next I MsgBox msg End Sub  Public Sub Shuffle(InOut() As Variant) Dim I As Long, J As Long Dim tempF As Double, Temp As Variant  Hi = UBound(InOut) Low = LBound(InOut) ReDim Helper(Low To Hi) As Double Randomize  For I = Low To Hi Helper(I) = Rnd Next I   J = (Hi - Low + 1) \ 2 Do While J > 0 For I = Low To Hi - J If Helper(I) > Helper(I + J) Then tempF = Helper(I) Helper(I) = Helper(I + J) Helper(I + J) = tempF 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 Helper(I) > Helper(I + J) Then tempF = Helper(I) Helper(I) = Helper(I + J) Helper(I + J) = tempF Temp = InOut(I) InOut(I) = InOut(I + J) InOut(I + J) = Temp End If Next I J = J \ 2 Loop End Sub 

0
jcbermu

Verwendung von VBA:

Public Sub customRandom() Application.ScreenUpdating = False Dim wks As Worksheet Set wks = ActiveSheet wks.Rows.Clear totalNumbers = 10 minValue = 1 maxValue = 50 firstRow = 1 firstColumn = 1 Randomize Dim results() As Integer ReDim results(totalNumbers) For i = 1 To totalNumbers randoming = True While randoming notfound = True a = Int(Rnd() * maxValue) + minValue For j = 1 To totalNumbers If a = results(j) Then notfound = False j = totalNumbers End If Next j If notfound = True Then results(i) = a randoming = False wks.Cells(firstRow, firstColumn) = a firstRow = firstRow + 1 End If Wend Next i Application.ScreenUpdating = True End Sub 

Es füllt die Zellen A1 bis A10, kann jedoch leicht mit den Variablen firstRowund geändert werden firstColumn.