Spielen mit einem Full Deck (Microsoft Excel)
Excel ist gut darin, Zufallszahlen zu generieren, aber es ist weniger gut darin, einen Zellbereich mit Zufallszahlen zu füllen, in denen keine bestimmte Zahl zweimal wiederholt wird. Beispielsweise möchten Sie möglicherweise 52 Zellen mit den Nummern 1 bis 52 in zufälliger Reihenfolge füllen. (Dies ist der Auswahl von Karten aus einem Stapel in zufälliger Reihenfolge sehr ähnlich, wobei eine bestimmte Karte nur einmal ausgewählt werden kann. Daher der Titel für diesen Tipp.)
Es gibt offensichtlich keine integrierte Excel-Funktion, die diese Funktion bietet. Sie müssen also mit Makros arbeiten. Glücklicherweise ist ein solches Makro nicht besonders schwer zu erstellen. Das folgende Makro macht den Trick gut:
Sub FillRand() Dim nums() As Integer Dim maxval As Integer Dim nrows As Integer, ncols As Integer Dim j As Integer, k As Integer Dim Ptr As Integer Randomize Set s = Selection maxval = s.Cells.Count nrows = s.Rows.Count ncols = s.Columns.Count ReDim nums(maxval, 2) 'Fill the initial array For j = 1 To maxval nums(j, 1) = j nums(j, 2) = Int((Rnd * maxval) + 1) Next j 'Sort the array based on the random numbers For j = 1 To maxval - 1 Ptr = j For k = j + 1 To maxval If nums(Ptr, 2) > nums(k, 2) Then Ptr = k Next k If Ptr <> j Then k = nums(Ptr, 1) nums(Ptr, 1) = nums(j, 1) nums(j, 1) = k k = nums(Ptr, 2) nums(Ptr, 2) = nums(j, 2) nums(j, 2) = k End If Next j 'Fill in the cells Ptr = 0 For j = 1 To nrows For k = 1 To ncols Ptr = Ptr + 1 s.Cells(j, k) = nums(Ptr, 1) Next k Next j End Sub
Dieses Makro verwendet ein zweidimensionales Array (nums), um herauszufinden, welche Zahlen verwendet werden sollen und in welcher Reihenfolge sie verwendet werden sollen. Nahe dem Anfang des Makros wird das Array mit einer statischen Zahl (1 bis zur Anzahl der Zellen) und einer Zufallszahl zwischen 1 und der Anzahl der Zellen gefüllt. Diese zweite Zahl wird dann verwendet, um das Array zu sortieren. Sobald das Array gespeichert ist, ist es einfach, die ursprünglichen Zahlen in die Zellen zu platzieren.
Der Grund, warum ein zweidimensionales Array verwendet wird, ist übrigens, dass die Rnd-Funktion, mit der VBA Zufallszahlen generiert, doppelte Werte zurückgeben kann. Obwohl die zweite Dimension des Arrays Duplikate enthalten kann, enthält die erste Dimension beim endgültigen Sortieren des Arrays keine Duplikate.
Um das Makro zu verwenden, wählen Sie zunächst die Zellen aus, die Sie mit sequentiellen Werten in zufälliger Reihenfolge füllen möchten. Wenn Sie das Makro ausführen, wird dieser Bereich gefüllt. Wenn Sie beispielsweise zehn Zellen auswählen und dann das Makro ausführen, werden diese Zellen in zufälliger Reihenfolge mit den Zahlen 1 bis 10 gefüllt.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (8269) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: