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

Forumthread: Vba:String zusammenfügen

Vba:String zusammenfügen
07.10.2019 16:17:00
Christian
Grüßt euch,
Ich versuche gerade mehere Wörter in einem String zusammen zu fügen.
Die Wörter in Zelle 3,6 bis 3,8 stehen dort immer und dieser Vorgang funktioniert auch gut.
Nach Zelle 3,8 können noch beliebig viele weitere Wörter eingefügt werden.
Diese sollen bei vorhandensein mit in den String eingelesen werden.
Wie gehe ich das am besten an?
Das untenstehende Makro fügt die 3 Begriffe bereits zusammen und schreibt jedesmal die Definiton davor.
Für die dynamisch hinzukommenden Wörter ab Zelle 3,9 soll lediglich durch ein "," getrennt jeder neue Namen eingelesen werden.
Sub Nameneinlesen()
Dim Reg As Worksheet
Set Reg = ThisWorkbook.Worksheets("Regression")
Dim Y As Variant 'Name des Abhängigen Wertes
Dim rf As String 'Names des Risikolosen Zinses
Dim X1 As String 'Name des Xi-ten Wertes
Dim Bez As String 'Gesamte Namensbezeichnung
Y = Reg.Cells(3, 6).Value
rf = Reg.Cells(3, 7).Value
X1 = Reg.Cells(3, 8).Value
Bez = "Y=" & Y & ";rf=" & rf & ";Xi=" & X1 & "," & .....(hier soll durch komma getrennt  _
jeder weitere Begriff dynamisch auftauchen)
MsgBox Bez
End Sub
Vielen Dank
Grüße
Christian
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vba:String zusammenfügen
07.10.2019 16:27:41
ChrisL
Hi Christian
Hier ein Muster:
Dim lZ As Long
lZ = Reg.Cells(Rows.Count, 3).End(xlUp).Row
If lZ > 9 Then MsgBox Join(Application.Transpose(Reg.Range("C9:C" & lZ)), ",")
cu
Chris
AW: Vba:String zusammenfügen
07.10.2019 16:51:03
Christian
Hi ChrisL
Danke für den Vorschlag.
Mich würde noch interessieren warum du den Wertebereich transponierst.
Und ist die IF Abfrage ein eigenständiger Vorgang, der meinen bestehenden String "Bez" ergänzt?
In meiner Tabelle stehen an der Stelle "F6" immer ein Wort, an der Stelle "G6" immer ein Wort und an stelle "H6" immer ein Wort.
Nun kann durch manuelles hinzufügen, beliebig viele Wörter in den Zellen "I6", "J6", "K6" usw. ein Wort hinzugefügt werden.
Diese Worte sollen dem String Bez angehängt werden. Und zwar ohne den bereits bestehenden Teil zu löschen.
Bez = "Y=" & Y & ";rf=" & rf & ";X1=" & X1

Grüße
Christian
Anzeige
AW: Vba:String zusammenfügen
07.10.2019 17:16:18
Daniel
HI
JOIN kann immer nur ein eindimensionales Array zu einem Text zusammenfassen.
die Arrays, die durch Auslesen eines Zellbereichs entstehen, sind aber immer zweidimensional und können daher von JOIN nicht verarbeitet werden.
dies gilt auch, wenn die Arrays nur aus einer Zeile oder einer Spalte bestehen, sie sind formal zweidimensional.
jetzt ist es aber so, dass nach einem Worksheetfunction.Transpose das Array auch als eindimensionales Array erkannt wird, wenn es aus einer Zeile besteht.
allerdings müsstest du hier das Transpose 2x hintereinander ausführen, denn dein Ausgangsarray besteht schon aus einer Zeile.
Nach dem ersten Transponieren bestünde es aus einer Spalte und das kann das JOIN auch nicht verarbeiten.
nach dem zweiten Transponieren hast du dann die passende Form (wenn der Ausgangszellbereich schon aus einer Zeile besteht)
ist er Ausgangszellbereich eine Spalte, reicht einmaliges Transponieren.
Gruß Daniel
Anzeige
AW: Vba:String zusammenfügen
07.10.2019 17:31:15
Christian
Hi Daniel,
klingt kompliziert. Ganz verstanden habe ich es nicht.
Ich habe das Problem nun anderst gelöst. Funktioniert wie es soll.
Lediglich die Definitonen vor den einzelnen Wörtern fehlen hier. Das ist aber nicht so tragisch.

'Schreibt die einzelnen Namen der Indizes aus Tabellenblatt "Regression" in einen Array.
ReDim einzelneWorte(AnzahlSpaltenR)
For i = 1 To UBound(einzelneWorte)
einzelneWorte(i) = Reg.Cells(3, 5 + i).Value
Next
'Fügt die einzelnen Worte des Arrays zu einem Text zusammen.
Bez = Join(einzelneWorte, "; ")
'Fügt die Bezeichnung im Tabellenblatt "Sonstige Daten" ein.
SonstD.Cells(letzteZeileSD, 6).Offset(1, 1) = Bez
End Sub
Schönen Abend
Christian
Anzeige
AW: Vba:String zusammenfügen
07.10.2019 18:19:52
ChrisL
Hi Christian
Ich habe Zeilen und Spalten verwechselt (C9:Cn anstelle F3:n3). Entsprechend müsstest du für die Ermittlung des relevanten Bereichs die letzte Spalte ermitteln.
lS = Reg.Cells(3, Columns.Count.End(xlToLeft).Column
Gemäss Erklärung Daniel, den Bereich vor dem Join zweifach transponieren. Die If-Then Prüfung war nur zur Sicherheit, denn für Join braucht es mehrere Werte.
Die For-Next-Schleife scheint mir in deinem Fall kein Nachteil (Laufzeit kaum spürbar), weshalb ich dabei bleiben würde.
Für den letzten Schritt siehe Antwort von Matthias.
Bez = "Y=" & Y & ";rf=" & rf & ";Xi=" & X1
Bez = Bez & ", " & Join(...)
cu
Chris
Anzeige
AW: Vba:String zusammenfügen
07.10.2019 18:34:14
ChrisL
Klammer fehlt
lS = Reg.Cells(3, Columns.Count).End(xlToLeft).Column
Bez = Bez & ...
07.10.2019 16:28:26
Matthias
Hallo
Probiers mal so:

Bez = "Y=" & Y & ";rf=" & rf & ";Xi=" & X1
Bez = Bez & ", Dein weiterer Text"
Gruß Matthias
AW: Bez = Bez & ...
07.10.2019 16:53:51
Christian
Hi Matthias,
das ganze sollte dynamisch funtkionieren. Ohne das ich jedesmal den neuen Text dort einfügen muss.
Also Excel soll erkennen, dass nun anstatt 3 Spalten 4 vorhanden sind und den 4 Wert neu an den bereits bestehenden String anfügen.
Mir geht es nur darum, wie ich das dynamische hinzufügen durch "join" programmieren kann.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Strings zusammenfügen in Excel


Schritt-für-Schritt-Anleitung

Um in Excel VBA Strings zusammenzufügen, kannst du die Join-Funktion verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, die dir zeigt, wie du mehrere Zellen in einen String zusammenfügst:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  3. Definiere Variablen:
    Dim Reg As Worksheet
    Set Reg = ThisWorkbook.Worksheets("Regression")
    Dim Bez As String
  4. Lese die Werte aus den Zellen:
    Bez = "Y=" & Reg.Cells(3, 6).Value & ";rf=" & Reg.Cells(3, 7).Value & ";Xi=" & Reg.Cells(3, 8).Value
  5. Ergänze dynamisch weitere Werte:
    Dim lZ As Long
    lZ = Reg.Cells(Rows.Count, 3).End(xlUp).Row
    If lZ > 9 Then 
       Bez = Bez & ", " & Join(Application.Transpose(Reg.Range("C9:C" & lZ)), ",")
    End If
  6. Gib das Ergebnis aus:
    MsgBox Bez

Häufige Fehler und Lösungen

  • Fehler: Join funktioniert nicht: Wenn du versuchst, ein mehrdimensionales Array zu verketten, stelle sicher, dass du das Array zuerst transponierst. Verwende Application.Transpose, um ein eindimensionales Array zu erhalten.

  • Fehler: Klammer fehlt: Achte darauf, dass alle Klammern in deinen Codezeilen korrekt geschlossen sind, besonders bei der Verwendung der Join-Funktion.


Alternative Methoden

Wenn du Strings in VBA zusammenfügen möchtest, gibt es auch andere Ansätze:

  1. Verwende & zum Verketten: Du kannst Strings auch einfach mit dem &-Operator verketten:

    Bez = Bez & ", " & Reg.Cells(3, 9).Value
  2. Arrays nutzen: Du kannst auch ein Array erstellen und die Werte darin speichern. Zum Beispiel:

    Dim einzelneWorte() As String
    ReDim einzelneWorte(1 To 3)
    einzelneWorte(1) = "Wort1"
    einzelneWorte(2) = "Wort2"
    Bez = Join(einzelneWorte, ", ")

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du mehrere Strings aus verschiedenen Zellen in einem Excel-Arbeitsblatt zusammenfügen kannst:

Sub BeispielStringZusammenfügen()
    Dim Reg As Worksheet
    Set Reg = ThisWorkbook.Worksheets("Regression")
    Dim Bez As String
    Bez = "Y=" & Reg.Cells(3, 6).Value & "; rf=" & Reg.Cells(3, 7).Value
    Dim lZ As Long
    lZ = Reg.Cells(Rows.Count, 3).End(xlUp).Row
    If lZ > 8 Then
        Bez = Bez & ", " & Join(Application.Transpose(Reg.Range("C9:C" & lZ)), ", ")
    End If
    MsgBox Bez
End Sub

Tipps für Profis

  • Verwende Dim-Anweisungen effektiv: Definiere die Variablen, die du benötigst, um die Lesbarkeit deines Codes zu verbessern.
  • Nutze Option Explicit: Setze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden müssen. Das hilft, Tippfehler zu vermeiden.
  • Teste deinen Code regelmäßig: Verwende MsgBox oder Debug.Print, um Zwischenergebnisse zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Strings aus unterschiedlichen Zellen zusammenfügen?
Du kannst die Join-Funktion in Kombination mit Application.Transpose verwenden, um mehrere Werte in einen String zu integrieren.

2. Warum muss ich das Array transponieren?
Join funktioniert nur mit eindimensionalen Arrays. Das Transponieren konvertiert ein mehrdimensionales Array in ein eindimensionales, damit Join es verarbeiten kann.

3. Was ist der Unterschied zwischen & und + beim Verketten von Strings?
In VBA wird & empfohlen, da + auch für mathematische Additionen verwendet wird, was zu unerwarteten Ergebnissen führen kann, wenn einer der Operanden nicht als String interpretiert wird.

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