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

Forumthread: Zeilen zu einem Datensatz zusammenfassen

Zeilen zu einem Datensatz zusammenfassen
25.06.2007 09:20:00
Katja27
Hallo Forum,
ich möchte, dass Excel (per Makro?) die Daten aus mehreren Zeilen in eine Zeile zusammenfasst. Es handelt sich hierbei um den Versand mehrerer Teile = mehrere Zeilen, die aber alle zu einem Auftrag gehören und zu einem Kunden gehen, also in einem Paket verschickt werden = zusammengefasste Zeile. Hier ist die Datei:
https://www.herber.de/bbs/user/43536.xls
Die Quelldatei verwendet pro Teil eine Zeile. Nachdem die Sendung verschickt wurde, brauchen wir alles in einer Zeile = ein Versandvorgang. Dabei sollte es auch noch so sein, dass die verschiedenen Teile zusammengefasst werden, also 3 x Motor, 1 x Schraube usw. (hintereinander in einer Zelle), und die Seriennummern ebenfalls hintereinander in einer Zelle angezeigt werden, denn die dürfen nicht verloren gehen.
Hab keine Ahnung, ob das überhaupt machbar ist und mit welchem Ansatz.
Hat jemand von euch eine Idee?
Vielen Dank,
Katja

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen zu einem Datensatz zusammenfassen
25.06.2007 10:00:00
Renee
Mazwara Katja,
Das Ganze soll ja irgendwie einen Zweck haben, oder nicht?
Ich kann mir keinen denken, denn mit ein paar Artikeln bist Du schnell einmal über die Limite von 256 Spalten raus und dann ist Dein sogenannter Datensatz nicht mehr konsistent. Kannst Du erläutern, für was Du Daten in der Form eines einzigen Datensatzes willst. Es würde sicher auch helfen, wenn Du Dein Beispiel manuell mit dem "Ziel-Datensatz" ausbauen würdest.
Greetz Renee

Anzeige
AW: Zeilen zu einem Datensatz zusammenfassen
25.06.2007 10:34:49
Katja27
Hallo Renee,
danke, dass du dich der Sache annimmst. Ich habe die Datei noch mal um eine manuell erstellte Ziel-Zeile erweitert:

Die Datei https://www.herber.de/bbs/user/43544.xls wurde aus Datenschutzgründen gelöscht


Die Quelldatei ist ein sog. Slotplan, darin geht es um das einzelne Teil. Wir als Versandabteilung nehmen diesen Slotplan als Grundlage und fassen die Teile zusammen, die an einen Empfänger geschickt werden. Die Versandabteilung führt eine sog. Versandhistorie, in der die Sendungen untereinander in einer Excel-Tabelle erfasst werden, also pro Sendung eine Zeile.
Im Moment müssen wir die Daten aus dem Slotplan in die Versandhistorie abtippen, so wie ich das jetzt manuell im Beispiel gemacht habe, das raubt unheimlich viel Zeit. Ich würde gern wissen, ob Excel das auch automatisch machen kann. (Kann es bestimmt, aber ich hab keine Ahnung, wie.)
Danke schon jetzt für die Mühe,
Gruß
Katja

Anzeige
AW: Zeilen zu einem Datensatz zusammenfassen
25.06.2007 14:49:00
Renee
Hello Katja,
Du kannst diesen Code in DieseArbeitsmappe kopieren.
Wenn Du jetzt im Quellenblatt die Zellen einer Lieferung markierst und dann Rechtsklick, wirst Du nach der Zieladdresse gefragt, wo dann die Zusammenfassung gemacht wird:

Option Explicit
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As  _
Boolean)
'   Code by Renee Sulaweyo
'   June 2006
Dim dRowIx As Double
Dim dTargetRow As Double
Dim dTargetCol As Double
Dim vTargetCell As Variant
Dim sNr() As String
Dim sDesc() As String
Dim iCnt() As Integer
Dim ixArr As Integer
Dim sErrMsg As String
Dim bDoIt As Boolean
If Target.Rows.Count = 1 Or _
Target.Columns.Count  6 Or _
Left(Target.Cells(1, 1).Address, 3)  "$A$" Then Exit Sub
vTargetCell = InputBox("Bitte geben Sie die Adresse der Zielzelle an:", _
"Sendung zusammenfassen", "A" & Target.Row + Target.Rows.Count)
On Error Resume Next
vTargetCell = UCase(vTargetCell)
bDoIt = True
If Not (Sh.Range(vTargetCell).Address(False, False) = vTargetCell) Then bDoIt = False
If Not bDoIt Then
MsgBox "Aktion abgebrochen", vbOKOnly + vbExclamation, "Sendung zusammenfassen"
Exit Sub
End If
On Error GoTo 0
dTargetRow = Sh.Range(vTargetCell).Row
dTargetCol = Sh.Range(vTargetCell).Column
Application.ScreenUpdating = False
Sh.Cells(dTargetRow, dTargetCol) = Target.Cells(1, 1)
Sh.Cells(dTargetRow, dTargetCol + 1) = Target.Cells(1, 2)
ReDim sNr(0)
ReDim sDesc(0)
ReDim iCnt(0)
sNr(0) = Target.Cells(1, 3)
sDesc(0) = Target.Cells(1, 4)
iCnt(0) = 1
Sh.Cells(dTargetRow, dTargetCol + 5) = Target.Cells(1, 6)
sErrMsg = ""
For dRowIx = 1 To Target.Rows.Count
If Target.Cells(dRowIx, 1)  Sh.Cells(dTargetRow, dTargetCol) _
Then sErrMsg = "AUFTRAG"
If Target.Cells(dRowIx, 2)  Sh.Cells(dTargetRow, dTargetCol + 1) _
Then sErrMsg = "EMPFÄNGER"
If Target.Cells(dRowIx, 6)  Sh.Cells(dTargetRow, dTargetCol + 5) _
Then sErrMsg = "LIEFERDATUM"
If sErrMsg  "" Then
MsgBox "Kein EINDEUTIGKEIT im " & sErrMsg & "!" & vbCrLf & _
"Aktion abgebrochen!", vbOKOnly + vbExclamation, "Sendung zusammenfassen"
Sh.Range(Sh.Cells(dTargetRow, dTargetCol), _
Sh.Cells(dTargetRow, dTargetCol + 5)).ClearContents
Exit Sub
End If
bDoIt = True
For ixArr = 0 To UBound(sNr)
If sNr(ixArr) = Target.Cells(dRowIx, 3) Then
If dRowIx > 1 Then iCnt(ixArr) = iCnt(ixArr) + 1
bDoIt = False
End If
Next ixArr
If bDoIt Then
ReDim Preserve iCnt(ixArr)
ReDim Preserve sNr(ixArr)
ReDim Preserve sDesc(ixArr)
iCnt(ixArr) = 1
sNr(ixArr) = Target.Cells(dRowIx, 3)
sDesc(ixArr) = Target.Cells(dRowIx, 4)
End If
Sh.Cells(dTargetRow, dTargetCol + 4) = Sh.Cells(dTargetRow, dTargetCol + 4) & _
IIf(dRowIx = 1, "", ", ") & Target.Cells(dRowIx, 5)
Next dRowIx
For ixArr = 0 To UBound(sNr)
Sh.Cells(dTargetRow, dTargetCol + 2) = Sh.Cells(dTargetRow, dTargetCol + 2) & _
IIf(ixArr = 0, "", ", ") & _
iCnt(ixArr) & "x" & sNr(ixArr)
Sh.Cells(dTargetRow, dTargetCol + 3) = Sh.Cells(dTargetRow, dTargetCol + 3) & _
IIf(ixArr = 0, "", ",") & _
iCnt(ixArr) & "x" & sDesc(ixArr)
Next ixArr
Application.ScreenUpdating = True
End Sub


Greetz Renee

Anzeige
Renee, vielen vielen Dank!
26.06.2007 13:18:41
Katja27
Hallo Renee,
ich bin völlig begeistert, wie du das hinbekommen hast. Es funktioniert tadellos und wird uns zukünftig eine Menge Arbeit ersparen.
Ich bin immer wieder überrascht, wieviel man mit Excel und VBA machen kann, und solche Lösungen machen unheimlich Lust darauf, selbst mal in die Welt von VBA einzusteigen. Ich werde mir auf jeden Fall die Seminarunterlagen von Herber besorgen, um mir mal ein paar Grundlagen anzueignen.
Zum Schluss noch mal im Namen aller, die vielleicht vergessen, sich bei ihrem Helfer zu bedanken: Vielen lieben Dank an alle Genies, die hier ihre Zeit aufwenden um anderen zu helfen!! Schön, dass es euch gibt.
Liebe Grüße
Katja

Anzeige
AW: Zeilen zu einem Datensatz zusammenfassen
25.06.2007 13:00:21
Ludicla
Hallo Katja,
ich würde das mit der Pivot-Tabelle abbilden.
Je nach Reihenfolge der Daten ist eigentlich jede Abbildung mit Details und
ohne Details darstellbar. Die Daten bleiben immer verhanden.
Die Pivot hab ich im Arbeitsblatt eingebaut, man kann aber ein eigenes
Tabellenblatt erzeugen.
https://www.herber.de/bbs/user/43557.xls
mfg Lucicla
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen zu einem Datensatz zusammenfassen in Excel


Schritt-für-Schritt-Anleitung

Um mehrere Zeilen in einer Zeile zusammenzufassen, kannst Du den folgenden VBA-Code verwenden. Dieser wird in die Arbeitsmappe eingefügt und ermöglicht es Dir, Daten aus mehreren Zeilen zu aggregieren.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge den folgenden Code in das Modul DieseArbeitsmappe ein:
Option Explicit
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    '   Code by Renee Sulaweyo
    '   June 2006
    Dim dRowIx As Double
    Dim dTargetRow As Double
    Dim dTargetCol As Double
    Dim vTargetCell As Variant
    Dim sNr() As String
    Dim sDesc() As String
    Dim iCnt() As Integer
    Dim ixArr As Integer
    Dim sErrMsg As String
    Dim bDoIt As Boolean
    If Target.Rows.Count = 1 Or _
       Target.Columns.Count <> 6 Or _
       Left(Target.Cells(1, 1).Address, 3) = "$A$" Then Exit Sub

    vTargetCell = InputBox("Bitte geben Sie die Adresse der Zielzelle an:", _
                           "Sendung zusammenfassen", "A" & Target.Row + Target.Rows.Count)
    On Error Resume Next
    vTargetCell = UCase(vTargetCell)
    bDoIt = True
    If Not (Sh.Range(vTargetCell).Address(False, False) = vTargetCell) Then bDoIt = False
    If Not bDoIt Then
        MsgBox "Aktion abgebrochen", vbOKOnly + vbExclamation, "Sendung zusammenfassen"
        Exit Sub
    End If
    On Error GoTo 0
    dTargetRow = Sh.Range(vTargetCell).Row
    dTargetCol = Sh.Range(vTargetCell).Column
    Application.ScreenUpdating = False
    Sh.Cells(dTargetRow, dTargetCol) = Target.Cells(1, 1)
    Sh.Cells(dTargetRow, dTargetCol + 1) = Target.Cells(1, 2)
    ReDim sNr(0)
    ReDim sDesc(0)
    ReDim iCnt(0)
    sNr(0) = Target.Cells(1, 3)
    sDesc(0) = Target.Cells(1, 4)
    iCnt(0) = 1
    Sh.Cells(dTargetRow, dTargetCol + 5) = Target.Cells(1, 6)
    sErrMsg = ""
    For dRowIx = 1 To Target.Rows.Count
        If Target.Cells(dRowIx, 1) <> Sh.Cells(dTargetRow, dTargetCol) Then sErrMsg = "AUFTRAG"
        If Target.Cells(dRowIx, 2) <> Sh.Cells(dTargetRow, dTargetCol + 1) Then sErrMsg = "EMPFÄNGER"
        If Target.Cells(dRowIx, 6) <> Sh.Cells(dTargetRow, dTargetCol + 5) Then sErrMsg = "LIEFERDATUM"
        If sErrMsg <> "" Then
            MsgBox "Kein EINDEUTIGKEIT im " & sErrMsg & "!" & vbCrLf & _
                   "Aktion abgebrochen!", vbOKOnly + vbExclamation, "Sendung zusammenfassen"
            Sh.Range(Sh.Cells(dTargetRow, dTargetCol), _
                     Sh.Cells(dTargetRow, dTargetCol + 5)).ClearContents
            Exit Sub
        End If
        bDoIt = True
        For ixArr = 0 To UBound(sNr)
            If sNr(ixArr) = Target.Cells(dRowIx, 3) Then
                If dRowIx > 1 Then iCnt(ixArr) = iCnt(ixArr) + 1
                bDoIt = False
            End If
        Next ixArr
        If bDoIt Then
            ReDim Preserve iCnt(ixArr)
            ReDim Preserve sNr(ixArr)
            ReDim Preserve sDesc(ixArr)
            iCnt(ixArr) = 1
            sNr(ixArr) = Target.Cells(dRowIx, 3)
            sDesc(ixArr) = Target.Cells(dRowIx, 4)
        End If
        Sh.Cells(dTargetRow, dTargetCol + 4) = Sh.Cells(dTargetRow, dTargetCol + 4) & _
            IIf(dRowIx = 1, "", ", ") & Target.Cells(dRowIx, 5)
    Next dRowIx
    For ixArr = 0 To UBound(sNr)
        Sh.Cells(dTargetRow, dTargetCol + 2) = Sh.Cells(dTargetRow, dTargetCol + 2) & _
            IIf(ixArr = 0, "", ", ") & _
            iCnt(ixArr) & "x" & sNr(ixArr)
        Sh.Cells(dTargetRow, dTargetCol + 3) = Sh.Cells(dTargetRow, dTargetCol + 3) & _
            IIf(ixArr = 0, "", ",") & _
            iCnt(ixArr) & "x" & sDesc(ixArr)
    Next ixArr
    Application.ScreenUpdating = True
End Sub
  1. Speichere die Datei als Makro-fähige Datei (*.xlsm).
  2. Klicke mit der rechten Maustaste auf die Zellen der Zeilen, die Du zusammenfassen möchtest, und gib die Zieladresse ein.

Häufige Fehler und Lösungen

  • Fehler: "Aktion abgebrochen"

    • Mögliche Ursache: Die ausgewählten Zellen entsprechen nicht den Anforderungen (z.B. Anzahl der Spalten).
    • Lösung: Stelle sicher, dass die Auswahl genau 6 Spalten umfasst.
  • Fehler: "Kein EINDEUTIGKEIT im AUFTRAG!"

    • Mögliche Ursache: Die Aufträge sind nicht eindeutig.
    • Lösung: Überprüfe die Daten auf doppelte Aufträge oder Empfänger.

Alternative Methoden

Wenn Du kein VBA verwenden möchtest, kannst Du auch eine Pivot-Tabelle nutzen, um Daten aus mehreren Zeilen zusammenzufassen. So funktioniert's:

  1. Markiere deine Daten.
  2. Gehe zu Einfügen > PivotTable.
  3. Wähle die gewünschten Felder, um die Daten darzustellen und zusammenzufassen.

Diese Methode ist besonders nützlich, wenn Du die Daten dynamisch analysieren möchtest.


Praktische Beispiele

Angenommen, Du hast folgende Daten:

Auftrag Empfänger Artikel-Nr Beschreibung Menge Lieferdatum
001 Kunde A 12345 Motor 3 01.01.2023
001 Kunde A 67890 Schraube 1 01.01.2023

Nach der Anwendung des VBA-Codes könnte die zusammengefasste Zeile so aussehen:

Auftrag Empfänger Artikel-Nr Beschreibung Menge Lieferdatum
001 Kunde A 3x12345, 1x67890 Motor, Schraube 4 01.01.2023

Tipps für Profis

  • Nutze Datenüberprüfung in Excel, um sicherzustellen, dass die Eingaben in den Zielzellen den Anforderungen entsprechen.
  • Experimentiere mit Excel-Formeln wie VERKETTEN oder TEXTVERKETTEN, um mehrere Werte in einer Zelle zusammenzufassen, falls Du keine VBA-Lösung verwenden möchtest.
  • Halte Deine Daten sauber und organisiert, um die Effizienz beim Zusammenfassen von Zeilen zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Zeilen in einer Zelle zusammenfassen? Um mehrere Zeilen in einer Zelle zusammenzufassen, kannst Du die Funktion TEXTVERKETTEN oder VERKETTEN verwenden, um die Daten zu kombinieren.

2. Funktioniert dieser VBA-Code in allen Excel-Versionen? Der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, insbesondere ab Excel 2010. Stelle sicher, dass Makros aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige