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

Konsolidieren von Text

Forumthread: Konsolidieren von Text

Konsolidieren von Text
03.01.2018 11:04:04
Text
Hallo zusammen,
ich suche eine Möglichkeit um Zeilen mit Text auf Grundlage von 2 Vorbedingungen zu konsolidieren:
Userbild
  • Schreibe alle Tätigkeiten einer Person, die sie an einem Datum erfüllt hat in eine Zelle mit Trennung "; "

  • Im nächsten Schritt soll die Funktion per Kontrollkästchen aktivierbar sein, da die sie nur optional sein.
    Vielen Dank im Voraus!
    Jome
    Anzeige

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Konsolidieren von Text
    03.01.2018 11:54:57
    Text
    Hallo Jome,
    falls du nicht zwingend auf die Darstellung der Tätigkeiten in einer Zelle angewiesen bist, dann kanst du auch mit einem Pivot-Tabellenbericht arbeiten mit den Zeilenfeldern Datum Person Tätigkeit .
    Wenn die Anzahl der unterschiedlichen Tätigkeiten sich in Grenzen hält, dann könntest du die Tätigkeit auch als Spaltenfeld festlegen.
    Mit Feld Tätigkeit und Funktion Anzahl im Datenbereich und dem benutzerdefinierten Format "X";"X";"" für die Ergebnisse wird "angekreuzt" welche Tätigkeiten eine Person an dem Datum ausgeführt hat.
    Eine reine Formellösung ist möglich, erfordert aber einiges an Hilfsspalten und komplexe Formeln, um
    A: die Liste der Datums/Person-Werte zu ermitteln
    B: die Tätigkeiten den Werten aus A zusuordnen.
    Alsweitere Option kämen Makros/benutzerdefinierte Funktionen in Frage.
    Gruß
    Franz
    Anzeige
    AW: Konsolidieren von Text
    03.01.2018 13:02:12
    Text
    Hallo Franz,
    danke für Deine Rückmeldung.
    Da es sich um immer unterschiedliche Tätigkeiten handeln und diese zusammen innerhalb einer Zelle stehen müssen, werde ich wohl nicht um ein Makro herumkommen.
    Es handelt sich bei der Liste bereits um eine Abwandlung der ursprünglichen Rohdaten, sodass folgende Spalten mit jeweilig unterschiedlichen Funktionen hinterlegt sind:
    Datum|Tag|Kalenderwoche|Monat|Sprint|Mitarbeiter|Rolle|Tätigkeit|Skill-Level|Aktivität|Dauer|MT	Kosten|Faktura
    
    Diese Liste soll nun per Kontrollkästchen um die besagte Funktion erweitert werden.
    Da ich nur sehr rudimentäre Kenntnisse in VBA besitze, wäre um ein hilfreichen Ansatz sehr dankbar!
    VG,
    Jome
    Anzeige
    AW: Konsolidieren von Text
    03.01.2018 22:12:47
    Text
    Hallo Jome,
    hier ein entsprechendes Makro.
    Die Ergebnisdaten werden in einem anderen Tabellenblatt ausgegeben.
    Gruß
    Franz
    Sub Taetigkeiten_zusammenfassen()
    Dim wksData As Worksheet, wksTaet As Worksheet
    Dim Zeile_L As Long
    Dim Zeile As Long, Zeile1 As Long, varDatum, varMA, bolDelete As Boolean
    'Tabellenblatt mit den Daten setzen
    Set wksData = ActiveWorkbook.Worksheets("Daten") 'Blattame ggf. anpassen
    'Tabellenblatt mit den gruppierten Erggebnisdaten setzen
    Set wksTaet = ActiveWorkbook.Worksheets("Tätigkeiten") 'Blattame ggf. anpassen
    Application.ScreenUpdating = False
    With wksTaet
    .UsedRange.ClearContents
    .Columns(1).NumberFormat = "DD.MM.YYYY"
    End With
    With wksData
    Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
    'Datumswerte in Spalte A kopieren
    .Range(.Cells(1, 1), .Cells(Zeile_L, 1)).Copy
    wksTaet.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
    'Datumswerte in Spalte F kopieren
    .Range(.Cells(1, 6), .Cells(Zeile_L, 6)).Copy
    wksTaet.Cells(1, 2).PasteSpecial Paste:=xlPasteValues
    'Taetigkeiten in Spalte H kopieren
    .Range(.Cells(1, 8), .Cells(Zeile_L, 8)).Copy
    wksTaet.Cells(1, 3).PasteSpecial Paste:=xlPasteValues
    End With
    With wksTaet
    Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
    'Daten sortieren
    With .Range(.Cells(1, 1), .Cells(Zeile_L, 3))
    .Sort Key1:=.Range("A1"), order1:=xlAscending, _
    Key2:=.Range("B1"), order2:=xlAscending, _
    Key3:=.Range("C1"), order3:=xlAscending, Header:=xlYes
    End With
    'Tätigkeiten von MA am Datum in jeweils 1. Zeile überragen
    For Zeile = 1 To Zeile_L + 1
    If varDatum  .Cells(Zeile, 1) Or varMA  .Cells(Zeile, 2) Then
    '1. Zeile, MA-Name und Datum merken wenn Name oder Datum wechselt
    Zeile1 = Zeile
    varDatum = .Cells(Zeile, 1).Value
    varMA = .Cells(Zeile, 2).Value
    Else
    'Tätigkeit in 1. Zeile in Spalte C hinzufügen
    .Cells(Zeile1, 3).Value = _
    .Cells(Zeile1, 3).Value & ";" & .Cells(Zeile, 3).Value
    'Inhalt in Zeile löschen
    .Rows(Zeile).ClearContents
    bolDelete = True 'merken, dass gelöscht wurde
    End If
    Next
    If bolDelete = True Then
    'leere Zeilen löschen
    With .Range(.Cells(1, 1), .Cells(Zeile_L, 1))
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp
    End With
    End If
    .Activate
    .Range("A1").Select
    .Columns.AutoFit
    End With
    Application.ScreenUpdating = True
    End Sub
    

    Anzeige
    AW: Konsolidieren von Text
    04.01.2018 16:54:09
    Text
    Überragend! Vielen Dank!
    Wie wäre dann die Schleife, um nun noch die Stunden aus der Spalte K pro Datum pro Mitarbeiter zu summieren?
    Ideal wär es natürlich, wenn die Stunden vor den Tätigkeiten stehen würde, aber das ist nur optional.
    Soweit ist es klar, aber danach?
    VG,
    Jome
    
    sub Taetigkeiten_zusammenfassen()
    Dim wksData As Worksheet, wksTaet As Worksheet
    Dim Zeile_L As Long
    Dim Zeile As Long, Zeile1 As Long, varDatum, varMA, bolDelete As Boolean
    'Tabellenblatt mit den Daten setzen
    Set wksData = ActiveWorkbook.Worksheets("Overview") 'Blattame ggf. anpassen
    'Tabellenblatt mit den gruppierten Erggebnisdaten setzen
    Set wksTaet = ActiveWorkbook.Worksheets("Ergebnis") 'Blattame ggf. anpassen
    Application.ScreenUpdating = False
    With wksTaet
    .UsedRange.ClearContents
    .Columns(1).NumberFormat = "DD.MM.YYYY"
    End With
    With wksData
    Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
    'Datumswerte in Spalte A kopieren
    .Range(.Cells(22, 1), .Cells(Zeile_L, 1)).Copy
    wksTaet.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
    'Datumswerte in Spalte F kopieren
    .Range(.Cells(22, 6), .Cells(Zeile_L, 6)).Copy
    wksTaet.Cells(1, 2).PasteSpecial Paste:=xlPasteValues
    'Taetigkeiten in Spalte H kopieren
    .Range(.Cells(22, 8), .Cells(Zeile_L, 8)).Copy
    wksTaet.Cells(1, 4).PasteSpecial Paste:=xlPasteValues
    'Stunden in Spalte K kopieren
    .Range(.Cells(22, 11), .Cells(Zeile_L, 11)).Copy
    wksTaet.Cells(1, 3).PasteSpecial Paste:=xlPasteValues
    End With
    

    Anzeige
    AW: Konsolidieren von Text
    05.01.2018 11:24:21
    Text
    Hallo Jome,
    sowie man die Zell-Texte mit "&" verketten kann, so kann man die Zahlen/Zeiten mit "+" addieren.
    Falls die Zeiten/Zahlen als Text in der Tabelle "Overviev" stehen, dann muss ggf. noch Wert-Konversionen mit CDate oder CDbl durchführen
    Entsprechende Code-Zeilen hab ich als Kommentar eingefügt.
    Gruß
    Franz
    Sub Taetigkeiten_zusammenfassen()
    Dim wksData As Worksheet, wksTaet As Worksheet
    Dim Zeile_L As Long
    Dim Zeile As Long, Zeile1 As Long, varDatum, varMA, bolDelete As Boolean
    'Tabellenblatt mit den Daten setzen
    Set wksData = ActiveWorkbook.Worksheets("Overview") 'Blattame ggf. anpassen
    'Tabellenblatt mit den gruppierten Erggebnisdaten setzen
    Set wksTaet = ActiveWorkbook.Worksheets("Ergebnis") 'Blattame ggf. anpassen
    Application.ScreenUpdating = False
    With wksTaet
    .UsedRange.ClearContents
    .Columns(1).NumberFormat = "DD.MM.YYYY"
    '        .Columns(3).NumberFormat = "#,##0.00"  '  wenn Dauer als Dezimalzahl
    .Columns(3).NumberFormat = "[h]:mm"     '  wenn Dauer als Uhrzeit
    End With
    With wksData
    Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
    'Datumswerte in Spalte A kopieren
    .Range(.Cells(22, 1), .Cells(Zeile_L, 1)).Copy
    wksTaet.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
    'Datumswerte in Spalte F kopieren
    .Range(.Cells(22, 6), .Cells(Zeile_L, 6)).Copy
    wksTaet.Cells(1, 2).PasteSpecial Paste:=xlPasteValues
    'Taetigkeiten in Spalte H kopieren
    .Range(.Cells(22, 8), .Cells(Zeile_L, 8)).Copy
    wksTaet.Cells(1, 4).PasteSpecial Paste:=xlPasteValues
    'Stunden in Spalte K kopieren
    .Range(.Cells(22, 11), .Cells(Zeile_L, 11)).Copy
    wksTaet.Cells(1, 3).PasteSpecial Paste:=xlPasteValues
    End With
    With wksTaet
    Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
    'Daten sortieren
    With .Range(.Cells(1, 1), .Cells(Zeile_L, 4))
    .Sort Key1:=.Range("A1"), order1:=xlAscending, _
    Key2:=.Range("B1"), order2:=xlAscending, _
    Key3:=.Range("D1"), order3:=xlAscending, Header:=xlYes
    End With
    'Tätigkeiten von MA am Datum in jeweils 1. Zeile überragen
    For Zeile = 1 To Zeile_L + 1
    If varDatum  .Cells(Zeile, 1) Or varMA  .Cells(Zeile, 2) Then
    '1. Zeile, MA-Name und Datum merken wenn Name oder Datum wechselt
    Zeile1 = Zeile
    varDatum = .Cells(Zeile, 1).Value
    varMA = .Cells(Zeile, 2).Value
    If Not Zeile = 1 And Zeile 

    Anzeige
    AW: Konsolidieren von Text
    05.01.2018 13:56:17
    Text
    Damit kann ich arbeiten.
    Hab vielen Dank Franz!
    VG,
    jome
    Anzeige

    Infobox / Tutorial

    Konsolidieren von Text in Excel


    Schritt-für-Schritt-Anleitung

    1. Daten vorbereiten: Stelle sicher, dass Deine Daten in einer Excel-Tabelle gut strukturiert sind. Die Spalten sollten die notwendigen Informationen wie Datum, Mitarbeiter und Tätigkeiten enthalten.

    2. Makro erstellen: Öffne den VBA-Editor (ALT + F11) und füge ein neues Modul hinzu. Kopiere den folgenden Code in das Modul:

      Sub Taetigkeiten_zusammenfassen()
         Dim wksData As Worksheet, wksTaet As Worksheet
         Dim Zeile_L As Long
         Dim Zeile As Long, Zeile1 As Long, varDatum, varMA, bolDelete As Boolean
         Set wksData = ActiveWorkbook.Worksheets("Daten") 'Blattame ggf. anpassen
         Set wksTaet = ActiveWorkbook.Worksheets("Tätigkeiten") 'Blattame ggf. anpassen
         Application.ScreenUpdating = False
         With wksTaet
             .UsedRange.ClearContents
             .Columns(1).NumberFormat = "DD.MM.YYYY"
         End With
         With wksData
             Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
             'Datumswerte in Spalte A kopieren
             .Range(.Cells(1, 1), .Cells(Zeile_L, 1)).Copy
             wksTaet.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
             'Weitere Spalten nach Bedarf kopieren
         End With
         'Zusammenfassen der Tätigkeiten
         '...
         Application.ScreenUpdating = True
      End Sub
    3. Makro anpassen: Passe den Code an Deine spezifischen Bedürfnisse an, indem Du die Blattnamen und die Spaltenreferenzen entsprechend änderst.

    4. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus (ALT + F8).


    Häufige Fehler und Lösungen

    • Fehler: "Blattname nicht gefunden": Überprüfe, ob die Blattnamen im Code genau mit denen in Deiner Excel-Datei übereinstimmen.

    • Fehler: "Typenübereinstimmung": Stelle sicher, dass die Daten in den Zellen die richtige Formatierung haben, z.B. Datum als Datum und Zahlen als Zahlen.

    • Lösung: Überprüfe die Zellformatierung: Verwende die Funktion CDate für Datumswerte oder CDbl für Zahlen, um sicherzustellen, dass die Werte korrekt verarbeitet werden.


    Alternative Methoden

    • Pivot-Tabellen: Wenn Du die Daten nicht unbedingt in einer Zelle konsolidieren möchtest, kannst Du Pivot-Tabellen verwenden. Setze die Felder Datum, Mitarbeiter und Tätigkeit als Zeilenfelder ein. Dies ist besonders nützlich, wenn Du die Anzahl der Tätigkeiten nachverfolgen möchtest.

    • Formellösungen: Du kannst auch mit Formeln arbeiten, um die Daten zu konsolidieren, erfordert jedoch möglicherweise zusätzliche Hilfsspalten.


    Praktische Beispiele

    1. Beispiel für Konsolidierung mit Makro:

      .Cells(Zeile1, 3).Value = _
      .Cells(Zeile1, 3).Value & ";" & .Cells(Zeile, 3).Value
    2. Zusammenfassen von Stunden: Du kannst die Stunden aus einer bestimmten Spalte ebenfalls konsolidieren:

      .Cells(Zeile1, 4).Value = .Cells(Zeile1, 4).Value + .Cells(Zeile, 4).Value

    Tipps für Profis

    • Nutze Kontrollkästchen: Füge Kontrollkästchen hinzu, um die Konsolidierungsfunktion optional zu machen. Dies kannst Du über die Entwicklertools in Excel machen.

    • Optimierung des Makros: Achte darauf, dass die Bildschirmaktualisierung während der Ausführung des Makros deaktiviert ist (Application.ScreenUpdating = False), um die Geschwindigkeit zu verbessern.

    • Datenvalidierung: Implementiere Datenvalidierung, um sicherzustellen, dass nur korrekte und relevante Daten in die Konsolidierung einfließen.


    FAQ: Häufige Fragen

    1. Wie kann ich die Konsolidierung für mehrere Tabellenblätter durchführen?
    Du kannst das Makro anpassen, um durch mehrere Tabellenblätter zu iterieren und die Daten in einer neuen Tabelle zu konsolidieren.

    2. Was tun, wenn meine Daten nicht korrekt konsolidiert werden?
    Überprüfe die Datenformatierung und stelle sicher, dass alle relevanten Werte in den richtigen Spalten stehen.

    3. Kann ich auch Text aus mehreren Zeilen in einer Zelle konsolidieren?
    Ja, indem Du das Makro entsprechend anpasst, kannst Du mehrere Texte in einer Zelle konsolidieren, wie im Beispiel gezeigt.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige