Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mit VBA Array oder String neu mischen

mit VBA Array oder String neu mischen
hary
Einen schoenen Exceltag
Komme nicht weiter. Ich habe eine Namensliste unterschiedlich lang hoechstens 20.
Nun moechte ich die Namen auslesen, mischen und gemischt zurueckschreiben.
Mit Formel kein Prob. nur moechte ich es in VBA machen, da ich diese Liste mit VBA weiterverteile(das hab ich schon).
Waere schoen wenn jemand mir auf die Spruenge hilft.
also einlesen: "a,b,c,d,e" und zurueckschreiben mit Zufall "d,b,a,c,e"
Danke schon mal.
gruss hary
Tabelle1
 F
1Namen
2a
3b
4c
5d
6e
7 
8 

Tabellendarstellung in Foren Version 5.30


Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: mit VBA Array oder String neu mischen
21.02.2012 09:27:54
Josef

Hallo Harry,
das geht z. B. so.
Sub mischen()
  Dim vntList As Variant, vntTmp As Variant
  Dim lngIndex As Long, lngRnd As Long
  
  With ActiveSheet
    vntList = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    Randomize Timer
    For lngIndex = 1 To UBound(vntList, 1)
      lngRnd = Int((UBound(vntList, 1)) * Rnd + 1)
      vntTmp = vntList(lngIndex, 1)
      vntList(lngIndex, 1) = vntList(lngRnd, 1)
      vntList(lngRnd, 1) = vntTmp
    Next
    .Range("A2").Resize(UBound(vntList, 1), 1) = vntList
  End With
End Sub



« Gruß Sepp »

Anzeige
AW: mit VBA Array oder String neu mischen
21.02.2012 09:51:07
hary
Hallo Sepp
Danke, da war ich mit meinem (nichtgeposteten) Loesungsweg auf dem falschen Dampfer.
gruss hary
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Namen mit VBA neu mischen


Schritt-für-Schritt-Anleitung

Um die Namen in Excel mit VBA zu mischen, kannst du folgenden Code verwenden. Dieser Code liest die Namen aus einer bestimmten Spalte, mischt sie zufällig und schreibt sie dann wieder zurück.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub mischen()
    Dim vntList As Variant, vntTmp As Variant
    Dim lngIndex As Long, lngRnd As Long

    With ActiveSheet
        vntList = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
        Randomize Timer
        For lngIndex = 1 To UBound(vntList, 1)
            lngRnd = Int((UBound(vntList, 1)) * Rnd + 1)
            vntTmp = vntList(lngIndex, 1)
            vntList(lngIndex, 1) = vntList(lngRnd, 1)
            vntList(lngRnd, 1) = vntTmp
        Next
        .Range("A2").Resize(UBound(vntList, 1), 1) = vntList
    End With
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus, indem du ALT + F8 drückst, das Makro mischen auswählst und auf Ausführen klickst.

Dieser Code verwendet ein VBA Array of strings, um die Namen zu speichern und sie dann zu mischen.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 9: Index außerhalb des gültigen Bereichs"

    • Lösung: Stelle sicher, dass die Range, die du angibst, tatsächlich Daten enthält. Überprüfe, dass in der angegebenen Spalte ab der Zeile 2 Namen stehen.
  • Fehler: Das Makro führt nichts aus.

    • Lösung: Überprüfe, ob das Makro aktiviert ist und ob du die richtige Tabelle ausgewählt hast, bevor du das Makro ausführst.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du die Namen in Excel auch manuell mischen. Eine einfache Möglichkeit ist:

  1. Kopiere die Namen in eine neue Spalte.
  2. Verwende die Funktion =RAND() in einer benachbarten Spalte, um zufällige Zahlen zu generieren.
  3. Sortiere die Namen nach der Spalte mit den Zufallszahlen.

Diese Methode ist einfach, aber weniger automatisiert als die Verwendung eines VBA Array of strings.


Praktische Beispiele

Angenommen, du hast folgende Namen in der Spalte A:

A
a
b
c
d
e

Nach dem Ausführen des VBA-Codes könnte die Liste in der Spalte A so aussehen:

A
d
b
a
c
e

Die Namen wurden nun erfolgreich gemischt. Für größere Listen kannst du die Methode ebenfalls verwenden, um eine VBA List of strings zu erstellen und die Namen zu mischen.


Tipps für Profis

  • Nutze VBA Arrays, um mit großen Datenmengen effizienter zu arbeiten.
  • Du kannst den Code leicht anpassen, um andere Datentypen oder Bereiche zu mischen, indem du den VBA Array to string-Konvertierungsprozess verwendest.
  • Wenn du häufig mit solchen Aufgaben arbeitest, speichere den Code in einer eigenen Add-In-Datei für schnellen Zugriff.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um andere Daten zu mischen? Du kannst die Range im Code ändern, z.B. Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row), um eine andere Spalte zu verwenden.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der Code sollte in allen modernen Excel-Versionen ab Excel 2007 funktionieren, die VBA unterstützen.

3. Was ist der Unterschied zwischen einem String-Array und einem Array of Strings in VBA? Beide Begriffe beziehen sich auf die Verwendung von Arrays, um Strings zu speichern. Der Begriff "String-Array" ist eine allgemeinere Bezeichnung, während "Array of Strings" spezifisch auf ein Array von Strings hinweist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige