VBA - Function zum Verketten

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Sam85.

    VBA - Function zum Verketten

    Hallo zusammen,

    ich würde gerne mehrere Zellen, einer Spalte, miteinander verketten und nach jedem Eintrag ein "," und "Leerzeichen" setzen.
    Eine Grundlegende Basis hab ich zwar und recherchiert habe auch etwas, nur weiß ich nicht ob meine Richtung so stimmt und wenn ja, wie ich das umsetzen kann.
    Freue mich über eine Rückmeldung.


    Visual Basic-Quellcode

    1. Public Function test(ByVal x As Range) As String
    2. test = x & ", "
    3. End Function


    Visual Basic-Quellcode

    1. Public Function Concat(ParamArray arr() As Variant) As String
    2. Dim lng As Long
    3. Dim str As String
    4. For lng = LBound(arr) To UBound(arr)
    5. str = str & arr(lng)
    6. Next lng
    7. Concat = str
    8. End Function

    Visual Basic-Quellcode

    1. Public Function Concat(ParamArray arr() As Variant) As String
    2. Concat = Join(Arr, ",")
    3. End Function


    oder

    Visual Basic-Quellcode

    1. Public Function Concat(LineRange As Range) As String
    2. Concat = Join(Application.Transpose(Application.Transpose(LineRange.Value)), ",")
    3. End Function

    Visual Basic-Quellcode

    1. Sub Test
    2. Debug.Print Concat(Range("A1:F1"))
    3. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()

    @petaod
    hmm ich hab glaube ich vergessen zu sagen, dass ich die Function, als Excel Funktion verwenden will (also auf dem Blatt selbst).
    Oder sollte das auch gehen?

    Diese Funktion funktioniert dann scheinbar nicht. Bekomme einen #Wert! Fehler.

    Visual Basic-Quellcode

    1. Public Function Concat(ParamArray arr() As Variant) As String
    2. Concat = Join(Arr, ",")
    3. End Function


    Ich hab zwischenzeitlich noch etwas gefunden, bin aber gerade am Hadern, wie ich ermittel, dass der letzte Eintrag erreicht wurde.

    Visual Basic-Quellcode

    1. Public Function concate(ByVal c As Range) As String
    2. Dim arr As Variant
    3. Application.Volatile
    4. For Each arr In c
    5. 'MsgBox c.Count
    6. 'If c.Value = c.Count Then concate = concate & arr Else concate = concate & arr & ", "
    7. concate = concate & arr & ", "
    8. Next arr
    9. End Function


    EDIT:
    Hab es jetzt so gelöst.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Public Function Concate(ByVal c As Range) As String
    3. Dim arr As Variant
    4. Application.Volatile
    5. For Each arr In c
    6. If Not arr.Font.Strikethrough Then Concate = Concate & arr & ", "
    7. Next arr
    8. Concate = Mid(Concate, 1, Len(Concate) - 2)
    9. End Function


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sam85“ ()