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

Forumthread: String in Array umwandeln

String in Array umwandeln
19.09.2017 16:17:41
Alifa
Hallo,
wie kann eine Zeichenkette s="xaxxbxxxcxdx" in ein Datenfeld v=Array(a,b,c,d) umgewandelt werden? "x" ist der Separator und a,b,c,d Variabeln. Im Beispiel soll LBound(v)=0 und UBound(v)=3 sein. Danke im Voraus für eure Hilfe
Gruß, Alifa
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String in Array umwandeln
19.09.2017 16:32:03
Beverly
Hi Alifa,
vielleicht gibt es noch eine einfachere Methode, aber mir fällt gerade nur diese ein:
Sub Extrahieren()
Dim strS As String
Dim arrDaten
Dim arrZiel()
Dim intZaehler As Integer
Dim intZiel As Integer
strS = "xaxxbxxxcxdx"
arrDaten = Split(strS, "x")
For intZiel = LBound(arrDaten) To UBound(arrDaten)
If arrDaten(intZiel)  "" Then
ReDim Preserve arrZiel(0 To intZaehler)
arrZiel(intZaehler) = arrDaten(intZiel)
intZaehler = intZaehler + 1
End If
Next intZiel
End Sub


Anzeige
AW: String in Array umwandeln
19.09.2017 18:43:59
Alifa
Hallo Beverly,
vielen Dank. Das klappt. Es war für mich interessant auch wegen "ReDim",mit dem ich so meine Schwierigkeiten habe...
Gruß, Alifa
AW: String in Array umwandeln
19.09.2017 16:52:50
Mullit
Hallo,
als Alternative eignet sich für sowas auch immer ne 'Regenechse'...
Option Explicit

Public Sub test()
    Dim objRegEx As Object, objMatch As Object
    Dim strText As String
    Dim lngIndex As Long
    strText = "xaxxbxxxcxdx"
    Set objRegEx = CreateObject(Class:="vbscript.regexp")
    With objRegEx
        .Global = True
        .IgnoreCase = True
        .MultiLine = False
        .Pattern = "[^x]"
        Set objMatch = .Execute(strText)
    End With
    For lngIndex = 0 To objMatch.Count - 1
        Debug.Print objMatch(lngIndex)
    Next
    Set objRegEx = Nothing
    Set objMatch = Nothing
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
Mit Split, dem leckeren Orange-Vanille-Eis
19.09.2017 17:28:32
lupo1
v = Split(Worksheetfunction.Trim(Replace(s, "x", " "))
AW: Mit Split, dem leckeren Orange-Vanille-Eis
19.09.2017 17:48:53
Luschi
Hallo lupo1,
mit 1 Klammer mehr wird es dann ein Sahne-Orange-Vanille-Eis.
Gruß von Luschi
aus klein-Paris
Die Klammer schenkt ihm der Editor dazu ;) owT
19.09.2017 19:14:48
lupo1
Anzeige
Falls das ohnehin in einen ZellBereich ...
19.09.2017 17:48:21
Luc:-?
…geschrieben wdn soll, Folks,
würde schon Folgendes reichen:
{=VSplit(VJoin(VSplit(BX1;"x");;-1))} oder
{=VSplit(MaskOn(BX1;"x";1);;-1)} oder
{=DataSet(VSplit(BX1;"x");"";-1;;1)} oder mit spezieller UDF
{=compSplit(BX1;"x")}
Die UDFs könnten auch in einer SubProzedur angewendet wdn, bei letzterer ggf auch nur ihre entsprd angepasste gerademal eine BefehlsZeile:
Function compSplit(Bezug, Optional ByVal TrennZ)
compSplit = Split(WorksheetFunction.Trim(Join(Split(Bezug, TrennZ))))
End Function
Die anderen, universelleren UDFs sind im Archiv zu finden:
MaskOn (Vs2.1): https://www.herber.de/cgi-bin/callthread.pl?index=1344962#1345181
DataSet (Vs1.3): https://www.herber.de/forum/archiv/1504to1508/t1507939.htm#1508954
VJoin (Vs1.4) & VSplit (Vs1.1): https://www.herber.de/bbs/user/99024.xlsm (in BspDatei)
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Falls das ohnehin in einen ZellBereich ...
19.09.2017 18:48:19
Alifa
vielen Dank an alle Helfer. Luc hat mit seiner vierten Klammer noch ein Sahnehäubchen drauf gesetzt!
Alifa
Bitte sehr... owT
24.09.2017 02:23:14
Luc:-?
:-?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

String in Array umwandeln


Schritt-für-Schritt-Anleitung

Um einen String in ein Array in Excel umzuwandeln, kannst Du die Split-Funktion in VBA verwenden. Hier ist ein einfaches Beispiel, das zeigt, wie eine Zeichenkette in ein Array umgewandelt wird:

Sub StringInArrayUmwandeln()
    Dim strS As String
    Dim arrDaten
    Dim arrZiel()
    Dim intZaehler As Integer
    Dim intZiel As Integer
    strS = "xaxxbxxxcxdx" ' Die Zeichenkette
    arrDaten = Split(strS, "x") ' Splitte den String an den Separator "x"

    For intZiel = LBound(arrDaten) To UBound(arrDaten)
        If arrDaten(intZiel) <> "" Then
            ReDim Preserve arrZiel(0 To intZaehler)
            arrZiel(intZaehler) = arrDaten(intZiel)
            intZaehler = intZaehler + 1
        End If
    Next intZiel
End Sub

Dieser Code speichert die Werte in arrZiel, wobei der Separator "x" verwendet wird. Die ReDim Preserve-Anweisung sorgt dafür, dass die vorherigen Werte im Array erhalten bleiben.


Häufige Fehler und Lösungen

  1. Fehler: "Index außerhalb des gültigen Bereichs"

    • Lösung: Stelle sicher, dass Du das Array korrekt initialisierst, bevor Du darauf zugreifst. Überprüfe auch, ob der Separator im String vorhanden ist.
  2. Fehler: Das Array ist leer

    • Lösung: Überprüfe den String und den verwendeten Separator. Wenn der Separator nicht gefunden wird, ergibt Split ein Array mit nur einem Element.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, einen String in ein Array umzuwandeln, zum Beispiel mit regulären Ausdrücken. Hier ist ein Beispiel, das zeigt, wie dies mit VBA-RegEx funktioniert:

Sub RegExStringInArray()
    Dim objRegEx As Object
    Dim objMatch As Object
    Dim strText As String
    Dim lngIndex As Long

    strText = "xaxxbxxxcxdx"
    Set objRegEx = CreateObject("vbscript.regexp")

    With objRegEx
        .Global = True
        .IgnoreCase = True
        .Pattern = "[^x]"
    End With

    Set objMatch = objRegEx.Execute(strText)

    For lngIndex = 0 To objMatch.Count - 1
        Debug.Print objMatch(lngIndex)
    Next lngIndex
End Sub

Diese Methode ist besonders nützlich, wenn Du komplexe Trennmuster benötigst.


Praktische Beispiele

Du kannst die oben genannten Methoden in verschiedenen Szenarien verwenden. Hier sind einige Beispiele:

  • Beispiel 1: Umwandeln eines durch Kommas getrennten Strings in ein Array:

    Dim arr As Variant
    arr = Split("Apfel,Banane,Kirsche", ",")
  • Beispiel 2: Verwenden von WorksheetFunction in Excel:

    v = Split(WorksheetFunction.Trim(Replace(s, "x", " ")))

Tipps für Profis

  • Nutze die ReDim Preserve-Anweisung sorgfältig, da sie die Performance beeinträchtigen kann, wenn sie häufig verwendet wird.
  • Wenn Du mit großen Datenmengen arbeitest, ziehe in Betracht, mit Arrays zu arbeiten, um die Ausführungsgeschwindigkeit zu verbessern.
  • Experimentiere mit verschiedenen Separatoren und kombiniere Split mit anderen Funktionen, um die gewünschte Datenstruktur zu erhalten.

FAQ: Häufige Fragen

1. Wie kann ich einen String in ein Array ohne VBA umwandeln?
In Excel-Formeln kannst Du TEXTSPLIT (in neueren Versionen) verwenden, um einen String in mehrere Zellen zu splitten.

2. Was ist der Unterschied zwischen Split und Join in VBA?
Split wandelt einen String in ein Array um, während Join ein Array in einen String zurückverwandelt.

3. Wie kann ich die Array-Elemente anzeigen?
Du kannst eine Schleife verwenden, um die Elemente des Arrays anzuzeigen. Zum Beispiel:

For i = LBound(arrZiel) To UBound(arrZiel)
    Debug.Print arrZiel(i)
Next i

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