Spielen mit einem Full Deck (Microsoft Excel)
Wie ist das für einen Tipptitel? Der Titel bezieht sich auf die Tatsache, dass Sie möglicherweise einen Zellbereich mit einer Reihe von Zahlen in zufälliger Reihenfolge füllen müssen. Beispielsweise möchten Sie möglicherweise 52 Zellen mit den Nummern 1 bis 52 in zufälliger Reihenfolge füllen. (Dies ähnelt dem Ziehen von Karten aus einem gemischten Deck, daher der Tipptitel.)
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. Selbst wenn 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 (2280) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: