Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schleife/ Werte in Variablen speichern

Forumthread: Schleife/ Werte in Variablen speichern

Schleife/ Werte in Variablen speichern
15.10.2003 09:12:09
Martin
Hallo,

Ich habe folgende Frage. Spalte A einer Tabelle enthält Ländercodes, zB.


CH
FR
CH
ES
IT
IT
...


Der gleiche Code kann mehrmals vorkommen, die Liste ist nicht nach Codes geordnet (und kann auch nicht).
Sinn dieser Codes ist es, die Tabelle an bestimmte Personen in der Firma zu verschicken. Der User sieht also zB 'CH' und 'FR' und weiss, dass die Tabelle (mittel Makro) an Kollegen geschickt werden soll, die verantwortlich sind für die Schweiz und Frankreich. Das funktioniert derzeit so, dass eine Userform hochkommt und der User mittels Checkboxen die entsprechende Auswahl festlegt.

Ich dachte mir, dass Excel mir eigentlich diese Arbeit abnehmen kann. Dazu müsste (so stelle ich mir das vor) eine Schleife Spalte A durchlaufen und alle verschiedenen Codes einmal in einer Variablen speichern. Der Inhalt der Variablen wird dann an an den Teil des Makros weitergegeben, der das 'TO' Feld bestimmt.

Ich weiss aber nicht
- wie ich alle verschiedenen Werte nur einmal in einem Durchaluf speichern soll und
- wie diese Codes dann in die korrekten Mailadressen konvertiert werden können.

Kann mir jemand hierbei helfen bitte.

Gruss,
Martin
Anzeige

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

Betreff
Datum
Anwender
Anzeige
Mit Collection
16.10.2003 00:15:53
Hans T.
Hallo Martin

Versuch mal den folgenden Code. Die MsgBox kannst du durch die Weiterverarbeitung der Ländercodes ersetzen.

Public colCCodes As New Collection


Private Sub Auflisten()
'Listet die Werte in Spalte 1 einmal sortiert auf
Dim varCCode As Variant
While colCCodes.Count > 0                 'Collection leeren, falls nicht leer
colCCodes.Remove colCCodes.Count
Wend
On Error Resume Next                      'unterdrückt Fehler bei mehrfachen Einträgen
'von A1 bis zur letzen benutzten Zelle lesen
For Each varCCode In Range([A1], Cells([A1].SpecialCells(xlCellTypeLastCell).Row, 1)).Cells
If Not IsEmpty(varCCode) Then           'leere Zellen ignorieren
colCCodes.Add varCCode, varCCode      'trägt Code ein, falls noch nicht in Collection
End If
Next
Set colCCodes = SortColl(colCCodes)       'sortieren, falls erwünscht
For Each varCCode In colCCodes            'Ausgabe
MsgBox varCCode
Next
End Sub



Private Function SortColl(colRaw As Collection) As Collection
'01-00 Sorts elements in a collection as text (a = A, 10 < 2, _ < 0)
Dim i As Long, j As Long
Dim varSwap1, varSwap2
For i = 1 To colRaw.Count - 1
For j = i + 1 To colRaw.Count
If colRaw(i) > colRaw(j) Then
varSwap1 = colRaw(i)
varSwap2 = colRaw(j)
colRaw.Add varSwap1, before:=j
colRaw.Add varSwap2, before:=i
colRaw.Remove i + 1
colRaw.Remove j + 1
End If
Next
Next
Set SortColl = colRaw
End Function


Gruss
Hans T.
Anzeige
AW: Mit Collection
16.10.2003 08:55:57
Martin
Vielen Dank Hans, das klappt sehr gut.

Gruss,
Martin
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Ländercodes in Excel speichern und verarbeiten


Schritt-für-Schritt-Anleitung

Um die Ländercodes aus Spalte A in einer Excel-Tabelle zu speichern und weiterzuverarbeiten, kannst du das folgende VBA-Makro verwenden. Dieses Makro durchläuft die Werte in Spalte A, speichert sie in einer Collection und gibt sie anschließend aus.

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Einfügen eines neuen Moduls: Klicke auf Einfügen > Modul.
  3. Füge den folgenden Code ein:
Public colCCodes As New Collection

Private Sub Auflisten()
    'Listet die Werte in Spalte 1 einmal sortiert auf
    Dim varCCode As Variant
    While colCCodes.Count > 0                 'Collection leeren, falls nicht leer
        colCCodes.Remove colCCodes.Count
    Wend
    On Error Resume Next                      'unterdrückt Fehler bei mehrfachen Einträgen
    'von A1 bis zur letzen benutzten Zelle lesen
    For Each varCCode In Range([A1], Cells([A1].SpecialCells(xlCellTypeLastCell).Row, 1)).Cells
        If Not IsEmpty(varCCode) Then           'leere Zellen ignorieren
            colCCodes.Add varCCode, varCCode      'trägt Code ein, falls noch nicht in Collection
        End If
    Next
    Set colCCodes = SortColl(colCCodes)       'sortieren, falls erwünscht
    For Each varCCode In colCCodes            'Ausgabe
        MsgBox varCCode
    Next
End Sub

Private Function SortColl(colRaw As Collection) As Collection
    'Sortiert Elemente in einer Collection
    Dim i As Long, j As Long
    Dim varSwap1, varSwap2
    For i = 1 To colRaw.Count - 1
        For j = i + 1 To colRaw.Count
            If colRaw(i) > colRaw(j) Then
                varSwap1 = colRaw(i)
                varSwap2 = colRaw(j)
                colRaw.Add varSwap1, before:=j
                colRaw.Add varSwap2, before:=i
                colRaw.Remove i + 1
                colRaw.Remove j + 1
            End If
        Next
    Next
    Set SortColl = colRaw
End Function
  1. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle Auflisten und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler bei der Ausführung des Makros: Wenn du eine Fehlermeldung erhältst, stelle sicher, dass deine Daten in Spalte A keine leeren Zellen enthalten. Das Makro ignoriert leere Zellen, aber sie dürfen nicht in den Bereich fallen, der durch Range([A1], ...) definiert ist.

  • Collection bleibt leer: Überprüfe, ob die Zellen in Spalte A tatsächlich Werte enthalten. Das Makro entfernt Duplikate, weshalb die Collection möglicherweise leer bleibt, wenn alle Werte identisch sind.


Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die Funktion EINDEUTIGE in Excel (ab Excel 365) nutzen:

  1. Klicke in eine leere Zelle.
  2. Gib die folgende Formel ein:
=EINDEUTIGE(A:A)

Diese Formel gibt dir eine Liste der einzigartigen Ländercodes in Spalte A zurück.


Praktische Beispiele

Wenn du die Ländercodes an bestimmte E-Mail-Adressen binden möchtest, kannst du das Makro anpassen, um die Codes direkt in eine E-Mail zu integrieren. Hier ein einfaches Beispiel, wie du die Codes weiterverarbeiten könntest:

For Each varCCode In colCCodes
    ' Beispiel: E-Mail an die Adresse basierend auf dem Ländercode senden
    Call SendEmail(varCCode)
Next

Hierbei sollte die SendEmail-Funktion entsprechend implementiert werden, um E-Mails zu versenden.


Tipps für Profis

  • Debugging: Nutze die Debug.Print-Anweisung, um Zwischenergebnisse in das Direktfenster zu schreiben. Dies kann dir helfen, Fehler zu identifizieren.

  • Datenvalidierung: Stelle sicher, dass die Eingabedaten in Spalte A korrekt sind. Eine Datenvalidierung kann verhindern, dass ungültige Codes eingegeben werden.


FAQ: Häufige Fragen

1. Kann ich das Makro anpassen, um die Codes in eine andere Spalte zu speichern?
Ja, du kannst die Ausgabe in eine andere Spalte anpassen, indem du die MsgBox-Anweisung durch einen Code ersetzt, der die Werte in die gewünschte Spalte schreibt.

2. Wie kann ich die E-Mail-Adressen für die Ländercodes festlegen?
Du kannst ein Dictionary in VBA verwenden, um Ländercodes den entsprechenden E-Mail-Adressen zuzuordnen. Dies ermöglicht eine einfache Zuordnung, wenn das Makro die Codes verarbeitet.

3. Funktioniert dieses Makro in Excel 2016?
Ja, das Makro sollte auch in Excel 2016 funktionieren, solange VBA aktiviert ist und die Daten in der richtigen Form vorliegen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige