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

Textverketten in VBA

Forumthread: Textverketten in VBA

Textverketten in VBA
04.01.2021 21:30:32
kai_os
Hallo zusammen,
ich benötige die Funktion TEXTVERKETTEN als VBA, da unser Unternehmen nicht eine fortschrittliche Raketensoftware wie Office 365 besitzt (die Funktion ist nur mit einem 365 Abo verfügbar).
Bereich:
Zelle A1 - An (Input immer unterschiedlich)
Merkel
Scholz
Altmaier
Wunschoutput in Zelle C1 als zusammenhängender Text getrennt durch " | ":
Merkel | Scholz | Altmaier
Vielen Dank für die Hilfe!
Gruß
Kai
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Es geht noch besser
05.01.2021 16:51:05
Sulprobil
Hallo,
Danke, Lupo!
Es geht aber noch besser, denke ich, wenn man z. B. folgende Funktion definiert:

Function TEXTVERKETTEN(Trennzeichen As String, _
Leer_ignorieren As Boolean, _
Text1 As Variant) As String
'Reverse ("moc.LiborPlus.www") PB V1.1 05-Jan-2021
Dim v, s As String
For Each v In Text1
If Not (Leer_ignorieren And v = "") Then
TEXTVERKETTEN = TEXTVERKETTEN & s & v
s = Trennzeichen
End If
Next v
End Function
Sie entspricht mit Ausnahme mehrerer möglicher Textparameter (man kann hier nur ein Array oder einen Bereich angeben) am Ende des Aufrufs der TEXTVERKETTEN Funktion ab Excel 2019.
Sobald man Excel 2019 oder neuer einsetzt, würde auch die interne Funktion genommen werden, und man könnte dieses Makro löschen.
Von der Nutzung Luc:?'s VJOIN Funktion möchte ich mal fröhlich abraten. Sie hat andere Parameter, und wir wollen doch - mit Ausnahme von Luc:? versteht sich, aber er scheint ja genug Zeit zu haben - die Funktionsaufrufe nicht zweimal anfassen.
Viel Spaß,
Bernd
Anzeige
Es gibt im Archiv etliche UDFs, die dieses alte …
05.01.2021 19:06:04
Luc:?
…Problem bzw alten NutzerWunsch zu lösen versprechen, Bernd,
aber keine davon ist so umfassend wie VJoin, das außerdem die richtige engl Bezeichnung verwendet, weil es primär auf der vbFkt Join basiert, was bekanntlich, wie alle diese UDFs, vor der neuen Xl-Fkt da war. Die Übersetzer haben dann aus dem Xl-Original TextJoin TEXTVERKETTEN gemacht, was ebenfalls wieder das alte Concatenate mit Join gleichsetzt, obwohl hierbei anders vorgegangen wird und es im Deutschen auch andere Worte dafür gibt, zB VERBINDEN, was auch gelegentlich für derartige UDFs und Operationen genutzt wurde.
Ansonsten schlägst du aus praktischen Gründen etwas vor, was nicht mal µS macht, obwohl es meist problemlos wäre, wenn es nicht etwas mit dem neuen Fktskern von Xl ab Vs12/2007 zu tun hätte. Ob dann der Übergang so problemlos wäre, wie du es dir vorstellst, ist fraglich, aber möglich. Außerdem entspricht auch deine neue Variante nicht ganz der Syntax von TEXTVERKETTEN, denn das hat nicht ohne Grund eine andere ArgumentReihenfolge und sich damit von der älteren vbFkt entfernt, die nahezu allen UDFs Vorbild war. Aber das hattest du ja erwähnt, wobei ich mangels TEXTVERKETTEN nicht weiß, ob es nicht noch andere Fallen gibt. Zumindest kann deine UDF keine FehlerWerte ausgeben, wodurch nur der Xl-StandardFehlerWert #WERT! möglich ist.
Das meine UDF nicht nur anders heißt und eine andere ArgumentReihenfolge hat, heißt nicht, dass ich jemals beabsichtigen würde, sie durch die neue xlFkt zu ersetzen, denn sie hat auch ein anderes Leistungsspektrum, was sehr hilfreich für andere Zwecke ist, aber dir wohl entgangen ist, zumal das wesentlich erst ab der nur Wenigen bekannten, bisher unveröffentlichten Vs1.5 greift. Es wäre also töricht, die durch eine primitivere Xl-Fkt ersetzen zu wollen.
Die SyntaxAbweichung, die dein Vorschlag aufweist, hat VJoin zwar auch, und das kann auch (bisher) nicht mit der Angabe eines diskontinuierlichen Bereichs kompensiert wdn, aber man könnte dafür vorerst eine andere UDF (ggf Xl-Fkt) verwenden, die den zusammenfasst.
Den eigentl HptUnterschied zwischen VJoin und TextJoin hast du aber bisher wohl nicht erkannt. Insofern kannst du gern fröhlich sein, aber das Lachen kommt aus meiner Ecke… :->
Luc :-?
Anzeige
Oder VJoin aus dem hiesigen Archiv. owT
05.01.2021 05:18:56
Luc:-?
:-?
;
Anzeige

Infobox / Tutorial

Textverketten in VBA


Schritt-für-Schritt-Anleitung

Um die Funktion TEXTVERKETTEN in VBA zu implementieren, folge diesen Schritten:

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

  2. Wähle Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code in das Modul ein:

    Function TEXTVERKETTEN(Trennzeichen As String, _
    Leer_ignorieren As Boolean, _
    Text1 As Variant) As String
        Dim v, s As String
        For Each v In Text1
            If Not (Leer_ignorieren And v = "") Then
                TEXTVERKETTEN = TEXTVERKETTEN & s & v
                s = Trennzeichen
            End If
        Next v
    End Function
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Verwende die Funktion in einer Zelle, z.B. =TEXTVERKETTEN(" | ", TRUE, A1:A3), um die Werte aus den Zellen A1 bis A3 zu verketten.


Häufige Fehler und Lösungen

  • Fehler: #WERT!
    Dieser Fehler tritt auf, wenn die Funktion falsche Argumente erhält. Stelle sicher, dass der Bereich, den du übergibst, gültig ist.

  • Problem: Werte werden nicht korrekt verketten.
    Überprüfe, ob das Trennzeichen und die Option zum Ignorieren leerer Werte korrekt eingestellt sind.


Alternative Methoden

Falls Du keine VBA-Lösung nutzen möchtest, gibt es Alternativen:

  1. TEXTVERKETTEN in Excel 365:
    Wenn Du Excel 365 nutzt, kannst Du die eingebaute Funktion TEXTVERKETTEN verwenden:

    =TEXTVERKETTEN(" | ", TRUE, A1:A3)
  2. Verwendung von CONCATENATE oder CONCAT:
    In älteren Excel-Versionen kannst Du die Funktionen CONCATENATE oder CONCAT verwenden, um Texte zusammenzufügen, jedoch ohne Trennzeichen.


Praktische Beispiele

Hier sind einige Beispiele, wie Du die VBA-Funktion TEXTVERKETTEN verwenden kannst:

  • Beispiel 1:
    Wenn Du in den Zellen A1 bis A3 die Namen "Merkel", "Scholz" und "Altmaier" hast, kannst Du die Verkettung so durchführen:

    =TEXTVERKETTEN(" | ", TRUE, A1:A3)

    Das Ergebnis in C1 wäre: Merkel | Scholz | Altmaier.

  • Beispiel 2:
    Um die Werte aus einem nicht zusammenhängenden Bereich zu verketten, kannst Du die Funktion anpassen oder eine andere UDF (benutzerdefinierte Funktion) verwenden.


Tipps für Profis

  • Fehlerbehandlung:
    Implementiere eine Fehlerbehandlung in Deiner UDF, um unerwartete Eingaben zu verwalten.

  • Performance optimieren:
    Achte darauf, dass die Anzahl der zu verknüpfenden Werte nicht zu hoch ist, da dies die Performance beeinträchtigen kann.

  • Dokumentation:
    Dokumentiere Deine Funktionen gut, damit Du und andere Benutzer später die Bedeutung der Argumente verstehen.


FAQ: Häufige Fragen

1. Wie kann ich die TEXTVERKETTEN-Funktion in einer Excel-Version verwenden, die nicht 365 ist?
Du kannst die benutzerdefinierte Funktion in VBA verwenden, wie im Tutorial beschrieben.

2. Gibt es eine einfache Möglichkeit, leere Zellen zu ignorieren?
Ja, setze den Parameter Leer_ignorieren auf TRUE, um leere Zellen beim Verketten zu ignorieren.

3. Wo finde ich mehr Informationen zu VBA und UDFs?
Es gibt viele Online-Ressourcen und Foren, die sich mit VBA und benutzerdefinierten Funktionen beschäftigen. Ein gutes Beispiel ist das Excel-Forum, in dem Du auch spezifische Fragen stellen kannst.

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