Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Vba:String zusammenfügen


Betrifft: Vba:String zusammenfügen von: Christian
Geschrieben am: 07.10.2019 16:17:00

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

  

Betrifft: AW: Vba:String zusammenfügen von: ChrisL
Geschrieben am: 07.10.2019 16:27:41

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


  

Betrifft: AW: Vba:String zusammenfügen von: Christian
Geschrieben am: 07.10.2019 16:51:03

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


  

Betrifft: AW: Vba:String zusammenfügen von: Daniel
Geschrieben am: 07.10.2019 17:16:18

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


  

Betrifft: AW: Vba:String zusammenfügen von: Christian
Geschrieben am: 07.10.2019 17:31:15

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


  

Betrifft: AW: Vba:String zusammenfügen von: ChrisL
Geschrieben am: 07.10.2019 18:19:52

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


  

Betrifft: AW: Vba:String zusammenfügen von: ChrisL
Geschrieben am: 07.10.2019 18:34:14

Klammer fehlt
lS = Reg.Cells(3, Columns.Count).End(xlToLeft).Column


  

Betrifft: Bez = Bez & ... von: Matthias L
Geschrieben am: 07.10.2019 16:28:26

Hallo

Probiers mal so:

Bez = "Y=" & Y & ";rf=" & rf & ";Xi=" & X1
Bez = Bez & ", Dein weiterer Text"
Gruß Matthias


  

Betrifft: AW: Bez = Bez & ... von: Christian
Geschrieben am: 07.10.2019 16:53:51

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.


Beiträge aus dem Excel-Forum zum Thema "Vba:String zusammenfügen"