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

Forumthread: Jeden String nach Zeilenumbruch in Array schreiben

Jeden String nach Zeilenumbruch in Array schreiben
12.07.2019 13:19:39
Waldemar
Guten Tag,
ich habe eine Spalte in der in jeder Zelle verschiedene Werte mit einem Zeilenumbruch getrennt sind. In Zelle P2 steht zum beispiel folgender String:
Name1
Name2
Name3
In Zelle P3 könnte jetzt stehen:
Name1
Name2
Name4
Ich würde gerne wissen wie man eine Variant oder String Array erstellt die folgende Werte hat:
arrayName(0) = Name1
arrayName(1) = Name2
arrayName(2) = Name3
arrayName(3) = Name4
Ich weiß, dass man dafür eine Schleife braucht die man so oft durchläuft wie man
Zeilen in Spalte P hat bzw. -1 oder +1 weil man die Kopfzeile nicht nehmen will.
Ich weiß jedoch auch nicht, wie man das in VBA formulieren soll.
Ich bedanke mich schon einmal im voraus.
Waldi
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Jeden String nach Zeilenumbruch in Array schreiben
12.07.2019 13:28:27
MCO
Hallo Waldi!
    Dim arrayName As Variant
arrayName= WorksheetFunction.Transpose(Selection)

Gruß, MCO
AW: Jeden String nach Zeilenumbruch in Array schreiben
12.07.2019 13:41:12
Waldemar
Hallo MCO,
deine Lösung funktioniert soweit, nur habe ich, wie ich jetzt bemerkt habe, meine Frage nicht richtig gestellt. Ich habe eine Tabelle mit mehreren Spalten und ich würde gerne nur die Werte aus Spalte P übernehmen. Deine Lösung trägt jegliche Zellenwerte in das Array ein. Ich habe versucht die Zeile anzupassen, weiß jedoch nicht was ich als Argument für Selection benutzen soll.
Anzeige
AW: Jeden String nach Zeilenumbruch in Array schreiben
12.07.2019 13:43:05
Daniel
HI
beispielsweise so:
Sub MitTextString()
Dim arrNamen
Dim Zelle
Dim TeilText
Dim Ergebnis As String
For Each Zelle In Range("A1:A2")
For Each TeilText In Split(Zelle.Value, vbLf)
If InStr("|" & Ergebnis & "|", "|" & TeilText & "|") = 0 Then
Ergebnis = Ergebnis & "|" & TeilText
End If
Next
Next
arrNamen = Split(Mid(Ergebnis, 2), "|")
End Sub

hier sammelst du die Werte erstmal in einem Textstring und teilst diese am Schluss ins Array auf.
wenn du weiter ernsthaft mit VBA arbeiten willst, solltest du dir auch mal diese Variante anschauen.
sie nutzt das Dictionary-Objekt.
Das Dictionary-Objekt ist im Pirnzip ein eindimensionales Array mit einem Freitext-Index.
Wenn man das kennt und verstanden hat, lassen sich damit viele schöne Sachen programmieren, besipelsweise komplexe Auswertungen ähnlich einer Pivottabelle, oder superschnelle SVerweis-Varianten für große Datenmengen.
Auch wenn man hier die Möglichkeiten des Dictionarys nur ansatzweise verwendet, ist diese Aufgabe ein gutes Beispiel, das Dictionary kennen zu lernen.
Sub MitDictionary()
Dim arrNamen
Dim Zelle
Dim TeilText
Dim dic As Object
Set dic = CreateObject("scripting.dictionary")
For Each Zelle In Range("A1:A2")
For Each TeilText In Split(Zelle.Value, vbLf)
If Not dic.exists(TeilText) Then dic(TeilText) = 0
Next
Next
arrNamen = dic.Keys
End Sub
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Strings nach Zeilenumbruch in ein Array umwandeln


Schritt-für-Schritt-Anleitung

Um Strings, die durch einen Zeilenumbruch getrennt sind, in ein Array zu konvertieren, kannst Du folgende Schritte in VBA ausführen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Ein neues Modul erstellen: Klicke auf Einfügen > Modul.
  3. Füge den folgenden Code ein:
Sub StringsInArray()
    Dim arrNamen As Variant
    Dim Zelle As Range
    Dim TeilText As Variant
    Dim Ergebnis As String

    ' Durchlaufe die Zellen im gewünschten Bereich
    For Each Zelle In Range("P2:P3") ' Hier den Bereich anpassen
        For Each TeilText In Split(Zelle.Value, vbLf) ' Zeilenumbruch verwenden
            If InStr("|" & Ergebnis & "|", "|" & TeilText & "|") = 0 Then
                Ergebnis = Ergebnis & "|" & TeilText
            End If
        Next TeilText
    Next Zelle

    arrNamen = Split(Mid(Ergebnis, 2), "|") ' Array erstellen
End Sub
  1. Führe das Makro aus: Gehe zurück zu Excel und führe das Makro aus, um die Strings aus der Spalte P in ein Array zu speichern.

Häufige Fehler und Lösungen

  • Fehler: "Objektvariable nicht festgelegt"

    • Lösung: Stelle sicher, dass der Bereich, den Du angibst, korrekt ist und dass die Zellen nicht leer sind.
  • Fehler: Das Array enthält Duplikate

    • Lösung: Überprüfe die Bedingung im If-Statement, um sicherzustellen, dass nur einzigartige Werte in das Array aufgenommen werden.

Alternative Methoden

Falls Du eine andere Methode ausprobieren möchtest, kannst Du das Dictionary-Objekt verwenden, um die Strings ohne Duplikate zu speichern. Hier ist ein Beispiel:

Sub MitDictionary()
    Dim arrNamen As Variant
    Dim Zelle As Range
    Dim TeilText As Variant
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary") ' Erstelle ein Dictionary

    For Each Zelle In Range("P2:P3") ' Hier den Bereich anpassen
        For Each TeilText In Split(Zelle.Value, vbLf) ' Zeilenumbruch verwenden
            If Not dic.Exists(TeilText) Then dic(TeilText) = 0
        Next TeilText
    Next Zelle

    arrNamen = dic.Keys ' Array aus dem Dictionary erstellen
End Sub

Praktische Beispiele

Wenn Du mehrere Zellen hast, die durch Zeilenumbrüche getrennte Werte enthalten, kannst Du den oben genannten VBA-Code verwenden, um diese in ein Array zu konvertieren. Zum Beispiel:

  • In Zelle P2:
    Name1
    Name2
    Name3
  • In Zelle P3:
    Name1
    Name2
    Name4

Nach Ausführung des Codes wird arrNamen die folgenden Werte enthalten:

  • arrNamen(0) = Name1
  • arrNamen(1) = Name2
  • arrNamen(2) = Name3
  • arrNamen(3) = Name4

Tipps für Profis

  • Verwende vbNewLine anstelle von vbLf, wenn Du in einem C#-Kontext arbeitest und Zeilenumbrüche in Strings verarbeiten möchtest.
  • Nutze die Join-Funktion, um ein Array zurück in einen String zu konvertieren, falls Du die Werte später wieder benötigst:
Dim resultString As String
resultString = Join(arrNamen, vbLf) ' Array zu String umwandeln

FAQ: Häufige Fragen

1. Wie kann ich das Array in einen String zurückverwandeln?
Du kannst die Join-Funktion verwenden, um das Array in einen String umzuwandeln, indem Du die Werte mit einem Zeilenumbruch verbindest.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, die meisten dieser VBA-Funktionen sind in den gängigen Excel-Versionen verfügbar. Achte jedoch darauf, dass Du die richtige Range angibst.

3. Was ist der Unterschied zwischen vbLf und vbNewLine?
vbLf steht für "Line Feed" und wird häufig in Excel verwendet, während vbNewLine eine plattformunabhängige Methode ist, um Zeilenumbrüche zu erzeugen.

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