Zufälliges Zuweisen von Namen zu Elementen (Microsoft Excel)
Gary hat zwei Listen in einem Arbeitsblatt. Eine davon in Spalte A enthält eine Liste der überschüssigen Artikel in unserem Unternehmen und die andere in Spalte G enthält eine Liste der Namen. In den Spalten B: F ist nichts. Gary möchte der Liste der Elemente zufällig Namen zuweisen. Jeder Name aus Spalte G sollte nur einmal vergeben werden. Wenn es mehr Namen als Elemente gibt, werden einige Namen nicht verwendet. Wenn weniger Namen als Elemente vorhanden sind, sind einigen Elementen keine Namen zugeordnet.
Es gibt verschiedene Möglichkeiten, dies zu tun. Am einfachsten ist es jedoch, jedem Element in Spalte A einfach eine Zufallszahl zuzuweisen.
Angenommen, das erste Element befindet sich in Zelle A1, fügen Sie Folgendes in Zelle B1 ein:
=RAND()
Doppelklicken Sie auf den Füllpunkt in Zelle B1, und Sie sollten eine Zufallszahl (zwischen 0 und 1) rechts von jedem Element in Spalte A erhalten.
Wählen Sie nun alle Zellen in Spalte B aus und drücken Sie Strg + C, um sie in die Zwischenablage zu kopieren. Verwenden Sie Paste Special, um Werte direkt wieder in die Zellen in Spalte B einzufügen. (Dadurch werden die Zellen von Formeln in tatsächliche statische Werte konvertiert.)
Sortieren Sie die Spalten A und B in aufsteigender Reihenfolge anhand der Werte in Spalte B.
Wenn Sie über die Zeilen schauen, werden Ihnen jetzt Elemente (Spalte A) zufällig mit einem Namen (Spalte G) verknüpft.
Auch wenn dies nicht erforderlich ist, können Sie dieselben Schritte ausführen, um rechts neben jedem Namen eine Zufallszahl hinzuzufügen und die Namen dann zu sortieren. (Ich sage, es ist nicht notwendig, da die Zufälligkeit der Elemente ausreichen sollte, um sicherzustellen, dass jedem Namen zufällige Elemente zugeordnet sind.)
Die bisher diskutierte Technik funktioniert hervorragend, wenn Sie die zufällige Paarung nur gelegentlich durchführen müssen. Wenn Sie dies häufig tun müssen, ist ein Makro möglicherweise der bessere Ansatz. Es gibt natürlich viele verschiedene makrobasierte Ansätze, die Sie verwenden können. Bei dem folgenden Ansatz wird davon ausgegangen, dass sich die Elementliste in Spalte A und die Namensliste in Spalte G befindet. Außerdem wird davon ausgegangen, dass in Zeile 1 für jede Spalte Kopfzellen vorhanden sind.
Sub AssignNames() Set srItems = Range("A2").CurrentRegion Set srNames = Range("G2").CurrentRegion NameCount = srItems.Rows.Count - 1 ItemCount = srNames.Rows.Count - 1 'Randomize Names ReDim tempArray(NameCount, 2) For x = 0 To NameCount - 1 tempArray(x, 0) = Range("G2").Offset(x, 0) tempArray(x, 1) = Rnd() Next x 'Bubble Sort For i = 0 To NameCount - 2 For j = i To NameCount - 1 If tempArray(i, 1) > tempArray(j, 1) Then tempItem = tempArray(j, 0) tempName = tempArray(j, 1) tempArray(j, 0) = tempArray(i, 0) tempArray(j, 1) = tempArray(i, 1) tempArray(i, 0) = tempItem tempArray(i, 1) = tempName End If Next j Next i 'AssignNames Range("B2") = "Assigned" AssignCount = NameCount If NameCount > ItemCount Then AssignCount = ItemCount For x = 0 To AssignCount Range("B2").Offset(x, 0) = tempArray(x, 0) Next x End Sub
Wenn es mehr Namen als Elemente gibt, weist das Makro Elementen zufällig Namen zu. Wenn es mehr Elemente als Namen gibt, werden Namen zufällig einigen Elementen zugewiesen und zufällig „Löcher“ (Elemente ohne Namen) hinterlassen. Es speichert sie in Spalte B und überschreibt alles, was dort war.
_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 (5682) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.