Excel VBA – Mischen mit VBA
Dieser Beitrag ist ein Teil der VBA Grundlagen Serie.
Wenn Sie ein zufällig zusammengewürfeltes Datenfeld erstellen wollen, können Sie dieses mit VBA mischen. In diesem Beitrag zeige ich Ihnen, wie es geht.
Wir legen in dem Makro
ArrayShuffle
ein Array (Datenfeld) mit 10 sortierten Zahlen an und übergeben es als Argument an die Shuffle
Funktion. Diese gibt ein Array in zufälliger Reihenfolge zurück. Danach werden die sortierten und zufälligen Daten in einer Meldungsbox ausgegeben. Anschließend wiederholen wir das Gleiche mit einem sortierten Text statt Zahlen.
Wir starten mit der Shuffle
Funktion. Starten Sie bitte mit ALT+F11
die Entwicklungsumgebung und fügen Sie ein neues Modul ein. In der Funktion durchlaufen wir nacheinander alle Elemente des übergebenen Datenfelds und vertauschen das aktuelle Element mit einem anderen, zufällig ausgewählten.
Nachdem wir den Zufallsgenerator mit Randomize
initialisiert haben, können wir die VBA Funktion Rnd
nutzen, um eine zufällige Zahl zwischen Null und Eins zu erzeugen. Wenn wir diese mit der Anzahl der zu mischenden Elemente multiplizieren und abrunden, bekommen wir eine Ganzzahl zwischen 0 und der Anzahl der Elemente minus 1. Daher zählen wir noch die Zahl 1 hinzu. Daraus ergibt sich das Element, welches mit dem aktuellen getauscht wird. Anschließend wird das gemischte Datenfeld zurückgegeben.
Public Function Shuffle(ByVal varArray As Variant) As Variant Dim lngPos As Long Dim lngRandom As Long Dim lngHigh As Long Dim lngLow As Long Dim varTemp As Variant If Not IsArray(varArray) Then Exit Function On Error Resume Next 'Initialisierung des Zufallsgenerators Randomize 'Grenzen ermitteln lngHigh = UBound(varArray) lngLow = LBound(varArray) For varPos = lngLow To lngHigh 'Erzeuge Zufallszahl lngRandom = Int((lngHigh - 1) * Rnd) + lngLow 'Elemente vertauschen varTemp = varArray(lngRandom) varArray(lngRandom) = varArray(lngPos) varArray(lngPos) = varTemp Next Shuffle = varArray End Function
111 VBA Makros die Ihr Leben leichter machen
Wollen Sie Ihre langweiligen Routineaufgaben loswerden? Möchten Sie Excel an Ihre Bedürfnisse anpassen, Berechnungen automatisieren, eigene Dialogfelder erstellen und vieles mehr? Dieses Buch zeigt Ihnen, wie Sie Ihre Aufgaben schnell und einfach mit VBA erledigen.
Nun testen wir unsere Funktion indem wir sie mit einem Makro aufrufen. Als Erstes erstellen wir ein Datenfeld (Array) mit Zahlen. Diese Originalwerte werde in der Variable strAusgabe
gespeichert. Anschließend übergeben wir das Datenfeld an die Shuffle
Funktion. Diese mischt die einzelnen Elemente und gibt sie in der neuen Reihenfolge zurück. Dieses Ergebnis geben wir zusammen mit den Originalwerten aus.
In VBA sieht das Ganze so aus:
Sub TestShuffle() Dim varNumbers As Variant Dim strAusgabe As String Dim lngPos As Long 'Datenfeld mit Zahlen befüllen varNumbers = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 'Original in eine Stringvariable schreiben strAusgabe = "" For lngPos = LBound(varNumbers) To UBound(varNumbers) strAusgabe = strAusgabe & varNumbers(lngPos) & "," Next strAusgabe = Left(strAusgabe, Len(strAusgabe) - 1) & vbCrLf 'Datenfeld über die Shuffle Funktion mischen varNumbers = Shuffle(varNumbers) 'Ergebnis in eine Stringvariable schreiben For lngPos = LBound(varNumbers) To UBound(varNumbers) strAusgabe = strAusgabe & varNumbers(lngPos) & "," Next 'Original und Ergebnis ausgeben MsgBox Left(strAusgabe, Len(strAusgabe) - 1) End Sub
Nun wollen wir dasselbe mit Text statt Zahlen versuchen. Daher füllen wir unser Datenfeld mit Namen.
Sub TestShuffleText() Dim varNumbers As Variant Dim strAusgabe As String Dim lngPos As Long 'Datenfeld mit Zahlen befüllen varNumbers = Array( _ "Christian", "Jennifer", "Kristin", "Maxim", "Patrick", _ "Phillip", "Susanne", "Thomas", "Tim", "Tobias") 'Original in eine Stringvariable schreiben strAusgabe = "" For lngPos = LBound(varNumbers) To UBound(varNumbers) strAusgabe = strAusgabe & varNumbers(lngPos) & "," Next strAusgabe = Left(strAusgabe, Len(strAusgabe) - 1) & vbCrLf 'Datenfeld über die Shuffle Funktion mischen varNumbers = Shuffle(varNumbers) 'Ergebnis in eine Stringvariable schreiben For lngPos = LBound(varNumbers) To UBound(varNumbers) strAusgabe = strAusgabe & varNumbers(lngPos) & "," Next 'Original und Ergebnis ausgeben MsgBox Left(strAusgabe, Len(strAusgabe) - 1) End Sub
Das Ergebnis schaut wie folgt aus.
Die Beispiel Excel Datei mit dem sofort einsetzbaren Makro und 111+ andere Makros, die Ihr Leben leichter machen, finden Sie hier.
Beeindrucke deinen Chef mit coolen Excel Tricks!
- Lasse dich von deinen Kollegen nicht abhängen!
- Spare Zeit und nutze diese für angenehmere Dinge
- Steigere deine Produktivität und Effizienz
- Es ist leicht - In meinem Newsletter gebe ich Schritt für Schritt Anleitungen die jeder versteht
- Bei der Anmeldung zu meinem Newsletter erhälst du das Buch „Excel Tricks die deinen Chef beeindrucken“ als Willkommensgeschenk.
Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.
Bildquelle: Pixabay, CC0 Public Domain
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!