Excel VBA – Mischen mit VBA

Wie Sie Daten mit Excel VBA mischen

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.

111 VBA Makros die Ihr Leben leichter machen. Egal ob Sie Einsteiger oder fortgeschrittener Anwender sind – in diesem Buch finden Sie Lösungen für Ihre alltäglichen Aufgaben. Keine Vorkenntnisse notwendig.

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

Unternehmensplanung mit SAP BPC

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.
Gemischte Zahlen
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.

Gemischte Namen
Es funktioniert prächtig.

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.
20 Excel Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. 100% sicher.

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

Denis Reis ist Business Intelligence Consultant und gibt als Buchautor sein Wissen rund um den SAP Projektalltag weiter. Wenn Sie tatkräftige Unterstützung bei Ihren SAP BI Projekten benötigen, können Sie ihn über Xing, LinkedIn oder Facebook kontaktieren.
Des Weiteren unterrichtet er Projektmanagement und Controlling an der Wiesbaden Business School. Der aus Düsseldorf stammende Familienmensch zählt zu denjenigen, die auf komplizierte Darstellungen verzichten und das Ganze auf den Punkt bringen.

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Kommentar verfassen