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

VBA: gibt es Gegenteil von "split" ?

Forumthread: VBA: gibt es Gegenteil von "split" ?

VBA: gibt es Gegenteil von "split" ?
08.11.2004 22:00:48
"split"
Hallo Excel-Freunde,
ich mochte in einem String einen bestimmten Teilstring ersetzen.
Mein String lautet zb. "30;50;30;20"
Jetzt soll in diesem Bsp die "30" an der 3. Stelle durch "100,25" ersetzt werden.
Hierfür habe ich folgende Funktion geschrieben (s.u)
Da die Strings aber teilweise sehr lang sind, würde ich die Funktion gerne noch optimieren.
Meine Frage:
Kann man auf die For-Next-Schleife irgendwie verzichten?
Ich suche eigentlich das Gegenteil von "Split" (...im Sinne von: setz den Array einfach wieder zusammen...)
Oder gibt es sonst einen Weg?
Vielen Dank für eure Hilfe
Gruß
Christoph
Option Explicit

Function ReplaceData(strGes, Cnt as Byte, Repl, Delimit as String) As String
'Bsp: ReplaceData("30;50;30;20", 3, 100.25, ";") ersetzt
'den dritten Eintrag im String durch "100,25"
Dim arr, i%
arr = Split(strGes, Delimit)
arr(Cnt - 1) = Repl
For i = 0 To UBound(arr)
ReplaceData = ReplaceData & arr(i) & Delimit
Next i
ReplaceData = Left(ReplaceData, Len(ReplaceData) - 1)
End Function

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: gibt es Gegenteil von "split" ?
"split"
Das Gegenstück zu Split ist Join.
Ulf
Ich sollte wirklisch schneller schreiben :-) o.T.
Ramses
...
Danke! das klappt prima
08.11.2004 22:17:08
Christoph
Hi Ulf,
genau das hab ich gesucht.
vielen Dank
Christoph
Anzeige
Glaub ich nicht...
Ramses
Hallo
hast du meinen Beitrag gelesen und deine Function mal getestet ?
Gruss Rainer
AW: Glaub ich nicht...
08.11.2004 22:35:10
Christoph
Hi Rainer,
ja...hab ich (oder hab ich was übersehen?
Mein Funktion lautet:

Function ReplaceData(strGes, Cnt As Byte, Repl, Delimit$) As String
Dim arr
arr = Split(strGes, Delimit)
arr(Cnt - 1) = Repl
ReplaceData = Join(arr, Delimit)
End Function

Geb ich zB in "B1" ein:
=ReplaceData(A2;3;D2;";")
(in A2 steht "20;30;40;50", in D2 "100,25")
kommt das raus was ich will.
Siehst du einen Haken?
Christoph
Anzeige
AW: Glaub ich nicht...
Ramses
Hallo
hast du das wirkich mal ausprobiert ;-)
Belegung
 EFGH
1    
2    
3 String30;50;30;20 
4 zu ersetzen3 
5 Ergebnis30;50;30;100.25 
6 Sollte aber sein30;50;100.25;20 
7    
8 wenn der 3. Eitnrag ersetzt werden soll  
9    
Formeln der Tabelle
G5 : =replacedata(G3;G4;100.25;";")
 

Gruss Rainer
Anzeige
AW: VBA: gibt es Gegenteil von "split" ?
"split"
Hallo
es geht schon ein wenig einfacher :-)
Option Explicit

Function ReplaceData(strGes, Cnt As Byte, Repl, Delimit As String) As String
'Bsp: ReplaceData("30;50;30;20", 3, 100.25, ";") ersetzt
'den dritten Eintrag im String durch "100,25"
Dim arr As Variant
arr = Split(strGes, Delimit)
arr(Cnt) = Repl
ReplaceData = Join(arr, Delimit)
End Function


Sub Test_Replace()
MsgBox ReplaceData("30;50;30;20", 2, 100.25, ";")
End Sub

ACHTUNG:
Das Array beginnt bei 0 !!! mit der Zählung
Gruss Rainer
Anzeige
Merci
08.11.2004 22:25:16
Christoph
Hi Rainer,
genauso hab ich es nach dem "schnelleren Tipp von Ulf" jetzt umgesetzt.
aber wir machen hier ja kein Wettrennen.
auch dir vielen Dank
Christoph
AW: Merci
Ramses
Hallo
der Hinweis auf den vorherigen Beitrag bezieht sich nicht auf die Geschwindigkeit, sonder eigentlich auf das Zählen innerhalb des Array's !!!
Wenn du "3" übergibst, wird der vierte Eintrag des Array's ersetzt.
Gruss Rainer
Anzeige
ja, das hab ich verstanden...
08.11.2004 22:37:36
Christoph
deshalb setze ich der Übersicht halber arr(Cnt-1)
Gruß
Christoph
Das hab ich wiederum überlesen :-)
Ramses
Hallo
das ist mir durch die Lappen gegangen nachdem ich den Code umgeschrieben habe :-))
Sorry
Gruss Rainer
nochmals merci...und gute Nacht (o.T.)
08.11.2004 22:48:58
Christoph
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Das Gegenteil von "Split" – So funktioniert's


Schritt-für-Schritt-Anleitung

Um das Gegenteil von "Split" in VBA zu erreichen, kannst du die Join-Funktion verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, um einen Teilstring zu ersetzen:

  1. Öffne Excel und drücke Alt + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject (deine Datei)" klickst und "Einfügen" > "Modul" auswählst.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Function ReplaceData(strGes As String, Cnt As Byte, Repl As Variant, Delimit As String) As String
       Dim arr As Variant
       arr = Split(strGes, Delimit)
       arr(Cnt - 1) = Repl
       ReplaceData = Join(arr, Delimit)
    End Function
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Verwende die Funktion in einer Zelle, z. B.:

    =ReplaceData("30;50;30;20", 3, 100.25, ";")

Diese Formel ersetzt die "30" an der dritten Position durch "100,25".


Häufige Fehler und Lösungen

  • Fehler: Array-Index außerhalb des Bereichs

    • Lösung: Stelle sicher, dass der übergebene Cnt-Wert im gültigen Bereich liegt. In VBA beginnt die Zählung bei 0, also musst du Cnt - 1 verwenden.
  • Fehler: Funktion gibt nicht das erwartete Ergebnis zurück

    • Lösung: Überprüfe, ob der Delimiter korrekt gesetzt ist und dass die Eingabewerte den erwarteten Typen entsprechen.

Alternative Methoden

Wenn du eine andere Methode als die Join-Funktion verwenden möchtest, kannst du auch den For-Next-Loop verwenden, um das Array manuell zusammenzufügen. Dies könnte jedoch weniger performant sein, insbesondere bei langen Strings.

Function ReplaceDataWithLoop(strGes As String, Cnt As Byte, Repl As Variant, Delimit As String) As String
    Dim arr As Variant
    Dim i As Long
    Dim result As String
    arr = Split(strGes, Delimit)
    arr(Cnt - 1) = Repl
    For i = LBound(arr) To UBound(arr)
        result = result & arr(i) & Delimit
    Next i
    ReplaceDataWithLoop = Left(result, Len(result) - Len(Delimit))
End Function

Praktische Beispiele

Hier sind einige Beispiele, wie du die ReplaceData-Funktion verwenden kannst:

  • Beispiel 1: Ersetze den zweiten Eintrag in einem String:

    =ReplaceData("10;20;30;40", 2, 25, ";")

    Ergebnis: 10;25;30;40

  • Beispiel 2: Ersetze den ersten Eintrag:

    =ReplaceData("A;B;C;D", 1, "Z", ";")

    Ergebnis: Z;B;C;D


Tipps für Profis

  • Verwendung von Option Explicit: Achte darauf, Option Explicit am Anfang deines Moduls zu verwenden, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.

  • Fehlerbehandlung einbauen: Füge eine Fehlerbehandlung hinzu, um unerwartete Eingabewerte abzufangen, z. B. durch On Error GoTo ErrorHandler.

  • Optimierung der Performance: Vermeide unnötige Schleifen und nutze die Join-Funktion, um die Performance zu verbessern, insbesondere bei großen Datenmengen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Split und Join in VBA?
Split teilt einen String in ein Array, während Join ein Array zu einem String zusammenfügt.

2. Wie kann ich die ReplaceData-Funktion in anderen VBA-Projekten verwenden?
Du kannst die Funktion einfach kopieren und in ein anderes Modul einfügen. Stelle sicher, dass die Datentypen übereinstimmen.

3. Was passiert, wenn ich einen Index außerhalb des Bereichs übergebe?
Ein Fehler wird ausgegeben. Stelle sicher, dass der Index innerhalb der Grenzen des Arrays liegt.

4. Unterstützt die Funktion auch andere Delimiter als Semikolons?
Ja, die Funktion kann mit jedem Delimiter arbeiten, den du angibst, z. B. Kommas oder Leerzeichen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige