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

Forumthread: VBA verketten von Zellen

VBA verketten von Zellen
Zellen
Hallo,
ich möchte gerne bestimmte Zellen verketten.
Beispiel: Ab Zeile 5 (bis zum Ende) -> Spalte C bis E -> Ergebis soll in Spalte F stehen. Die einzellnen Zellen pro Zeile sollen durch ein , "Komma" getrennt werden.
Leider funkioniert mein Versuch nicht so richtig, wo hab ich da den Fehler?
Kann mir da wer helfen?
Danke und Gruß
Dirk
Dim str As String Dim i As Long Dim z As Long For z = 5 To .Cells(Rows.Count, 2).End(xlUp).Row For i = 3 To 5 str = str & .Cells(z, i).Value & ", " Next i .Cells(z, 6).Value = str Next z
Anzeige
Der With-Rahmen fehlt!
13.12.2010 13:01:52
F1
F1
AW: Der With-Rahmen fehlt!
13.12.2010 13:26:27
Dirk
Hallo F1
meinst du so?
Wenn ja, geht trotzdem nicht.
Gruß Dirk
Sub verketten()
Dim str As String
Dim i As Long
Dim z As Long
With Worksheets("Tabelle1")
For z = 5 To .Cells(Rows.Count, 2).End(xlUp).Row
For i = 3 To 5
str = str & .Cells(z, i).Value & ", "
Next i
.Cells(z, 6).Value = str
Next z
End With
End Sub

Anzeige
AW: VBA verketten von Zellen
13.12.2010 13:10:32
Zellen
HAllo Dirk
Versuch mal so:
Tabelle1

 CDEFG
5OMGO,M,G 
6UIFU,I,F 
7EVDE,V,D 
8HURH,U,R 
9PDWP,D,W 
10BDUB,D,U 
11HXLH,X,L 
12NJEN,J,E 
13ERAE,R,A 
14YXXY,X,X 
15LLGL,L,G 
16     

Formeln der Tabelle
ZelleFormel
F5=joinen(C5:E5;",")


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Verketten Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function joinen(Bereich As Range, Optional Trenner As String = " ")
    Dim a() As Variant
    Dim zellen As Range
    Dim L As Long
    Redim a(Bereich.Count)
    For Each zellen In Bereich
        If zellen.Text <> "" Then
            a(L) = zellen.Text
            L = L + 1
        End If
    Next
    Redim Preserve a(L - 1)
    joinen = Join(a, Trenner)
End Function


ransi
Anzeige
AW: VBA verketten von Zellen
13.12.2010 13:22:56
Zellen
Hallo ransi,
vielen Dank für die Function, klappt so prima :-)
Würde es aber gerne über ein "Makro" lösen, da die Verkettung immer dann ausgelöst werden soll, wenn im Bereich Spalte C bis E Werte oder Veränderungen eingetragen werden.
Hast du da auch eine Idee für?
Danke
Gruß Dirk
Anzeige
AW: VBA verketten von Zellen
13.12.2010 13:31:31
Zellen
Hallo Dirk
da die Verkettung immer dann ausgelöst werden soll, wenn im Bereich Spalte C bis E Werte oder Veränderungen eingetragen werden.
Genau das ist doch der Sinn der Funktion...
Teste mal
ransi
Wert statt Formel
13.12.2010 13:37:46
Dirk
Hallo ransi,
ja, ganau das macht die Function!
Nur würde ich gerne nur das Ergebnis in der Zelle stehen haben und nicht die Function selbst (=joinen(C5:E5;",")).
Danke
Gruß Dirk
Anzeige
...und warum nur, bitteschön?! :-X owT
13.12.2010 14:01:06
Luc:-?
:-?
Fehler:VBA statt einfache C1&","&D1 Formel (owT)
13.12.2010 13:30:24
Renee

Lösung gefunden :)
13.12.2010 14:56:03
Dirk
Hallo,
habe eine Lösungsvariante gefunden :)
Danke für die Unterstützung!
Gruß Dirk
Private Sub Worksheet_Change(ByVal Target As range)
Dim str As String
Dim rng As range
Dim i As Long
Set rng = range("C5:E" & Cells(Rows.Count, 2).End(xlUp).Row)
If Target.Cells.Count = 1 And Not Application.Intersect(rng, Target) Is Nothing Then
Application.EnableEvents = False
For i = 3 To 5
str = str & Cells(Target.Row, i).Value & ","
Next i
Cells(Target.Row, 6) = str
End If
Application.EnableEvents = True
End Sub

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zellen mit VBA verketten in Excel


Schritt-für-Schritt-Anleitung

Um Zellen in Excel mithilfe von VBA zu verketten, gehst du wie folgt vor:

  1. Entwickler-Tab aktivieren: Falls der Entwickler-Tab noch nicht sichtbar ist, aktiviere ihn über die Excel-Optionen.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke rechts im Projektfenster mit der rechten Maustaste auf dein Projekt und wähle „Einfügen“ > „Modul“.

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

    Sub verketten()
        Dim str As String
        Dim i As Long
        Dim z As Long
        With Worksheets("Tabelle1")
            For z = 5 To .Cells(Rows.Count, 2).End(xlUp).Row
                str = "" ' String zurücksetzen
                For i = 3 To 5
                    str = str & .Cells(z, i).Value & ", "
                Next i
                .Cells(z, 6).Value = Left(str, Len(str) - 2) ' Letztes Komma entfernen
            Next z
        End With
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwickler > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: „Sub oder Funktion nicht definiert“
    Stelle sicher, dass du das Makro im richtigen Modul eingefügt hast und dass die Arbeitsblätter korrekt benannt sind.

  • Fehler: Ergebnis zeigt „#NAME?“
    Überprüfe, ob der Arbeitsblattname „Tabelle1“ korrekt ist. Falls du einen anderen Namen verwendest, passe den Code entsprechend an.

  • String wird nicht zurückgesetzt
    Vergiss nicht, str = "" vor der Schleife zurückzusetzen, um die Werte korrekt zu verketten.


Alternative Methoden

  1. Excel-Funktion verwenden: Du kannst auch die Funktion TEXTVERKETTEN (in neueren Excel-Versionen) verwenden, um Zellen zu verketten:

    =TEXTVERKETTEN(", "; WAHR; C5:E5)
  2. Verketten ohne VBA: Verwende die Formel:

    =C5 & ", " & D5 & ", " & E5

    Dies ist jedoch weniger dynamisch, da du die Formel für jede Zeile manuell anpassen musst.


Praktische Beispiele

Hier ist ein Beispiel, wie das Ergebnis in der Excel-Tabelle aussieht:

C D E F
O M G O, M, G
U I F U, I, F
E V D E, V, D

In Spalte F siehst du die verketteten Werte aus den Zellen C bis E, getrennt durch ein Komma.


Tipps für Profis

  • Ereignisgesteuertes Makro: Um die Verkettung automatisch auszulösen, wenn sich Werte in den Zellen ändern, kannst du den Worksheet_Change-Event verwenden:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim str As String
        Dim i As Long
        If Not Intersect(Target, Me.Range("C5:E100")) Is Nothing Then
            For i = 3 To 5
                str = str & Cells(Target.Row, i).Value & ", "
            Next i
            Cells(Target.Row, 6).Value = Left(str, Len(str) - 2)
        End If
    End Sub
  • Variablen anpassen: Passe die Bereiche und Variablen im Code an deine speziellen Anforderungen an, um die Effizienz zu steigern.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Bereiche verketten?
Verwende die Join()-Funktion in VBA, um mehrere Bereiche zu verketten. Du kannst die einzelnen Bereiche in ein Array speichern und dann mit Join() kombinieren.

2. Funktioniert dies in allen Excel-Versionen?
Ja, der VBA-Code sollte in allen Versionen von Excel funktionieren, die VBA unterstützen.

3. Kann ich andere Trennzeichen als ein Komma verwenden?
Ja, du kannst das Trennzeichen in der Join()-Funktion oder im VBA-Code anpassen, um jedes gewünschte Zeichen zu verwenden.

4. Wie kann ich sicherstellen, dass leere Zellen nicht verketten?
Im Code kannst du eine Bedingung hinzufügen, die überprüft, ob die Zelle leer ist, bevor du sie zum String hinzufügst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige