online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Sunshine.hh vom 21.01.2021, 21:12 Options

Lösung

Makro: Neue Zeilen aus anderen Tabs sofort in ein Übersicht - Tabellenblatt kopieren

Hallo,

leider keine Lösung bisher gefunden:

es gibt eine Excel (2003) Tabelle mit 5 Tabs: "B1", "B2" etc.), in welche 5 Personen Ihre Daten einftragen. Jeder Person ist sozusagen ein Tab zugewiesen. Die Überschriften sind in jedem Tabellenblatt gleich, so dass der jeweilige Bearbeiter die Namen der verkauften Produkte + Preis etc. in sein Tabellenblatt einträgt.

Schön wäre es, eine Übersicht der ersten 6 Zellen einer Zeile aus allen 5 Tabs in einem neuen Tabellenblatt zu haben. Damit man unabhängig vom Bearbeiter alle verkauften Artikel auf einen Blick hat.

Und zwar: sobald eine neue Zeile in irgendeinem anderen Tabellenblatt ausgefüllt wird, sollen die Infos auch ins "Übersicht"-Tabellenblatt kopiert werden.

Gibt's dafür eine Lösung mit VBA? Habe leider nur minimale Kenntnisse über Makros.

Vielen vielen Dank!!!


  • *Threadedit* 23.01.2009, 23:33:01
    Admininfo: Führ bitte Threads nicht fort indem du Weitere eröffnest, und vermeide Mehrfachanfragen. Die Datenbank und User werden es dir danken. Siehe FAQ 2, #3.


  • Antwort schreiben

    Antwort 1 von Sunshine.hh vom 22.01.2021, 19:25 Options

    Kann mir keiner helfen??

    Wenigstens ein Hinweis wo ich eine Antwort bekommen könnte?

    Bitte.... :(

    Antwort 2 von nostalgiker6 vom 22.01.2021, 21:07 Options

    Würde es vielleicht genügen, wenn die Teil-Zeilen der 5 Bearbeiter
    NEBENEINANDER stünden? Also:

    Bearb-1             Bearb2                Bearb5
    1 2 3 4 5 6 - - - 1 2 3 4 5 6 . . . . . 1 2 3 4 5 6

    (Jede Ziffer steht für eine Spalte -
    in Wirklichkeit wäre die Seite also u.U. ziemlich breit)

    Antwort 3 von Sunshine.hh vom 22.01.2021, 22:24 Options

    Nicht wirklich, denn dann kann ich nicht nach meinen gewünschten kriterien sortieren und z.B. den Besten Kauf o.ä. ermitteln.

    Ich denke, es soll möglich sein, neue daten ins neue Tabellenblatt per Makto zu übertragen.

    Es wäre auch ok, wenn ALLE Daten bzw. die komplette Zeile kopiert wäre.

    Freue mich auf neue Vorschläge!

    Antwort 4 von sigiru vom 23.01.2021, 01:18 Options

    So wie ich die Aufgabenstellung verstanden habe, sollen die Daten sofort nach der Eingabe einer vollständigen Zeile ins Übersicht-Tabellenblatt kopiert werden - jedoch würden dabei spätere Korrekturen von Tippfehlern in vorhandenen Zeilen unberücksichtigt bleiben.

    Wäre es dann nicht sinnvoller, am Ende einer Bearbeitung (oder zu einem beliebigen Zeitpunkt) ein Makro zur Neu-Erstellung der Gesamtliste aufzurufen? D. h. nach der Eingabe passiert nichts automatisch, und erst nach Makro-Aufruf wird die alte Übersicht gelöscht und eine neue erzeugt?

    Antwort 5 von Saarbauer vom 23.01.2021, 07:43 Options

    Hallo,

    müsste grundsätzlich machbar sein, vielleicht auch ohne Makro, da aber der Aufbau der Tabellen nicht eindeutig dargestellt ist, wie wäre es mit einer Beispieldatei

    http://www.file-upload.net/

    einstellen und den Link zur datei hier hinterlegen

    Gruß

    Helmut

    Antwort 6 von nighty vom 23.01.2021, 09:50 Options

    hi all :-)

    ein beispiel

    gruss nighty

    angenommen es werden 6 zellen genutzt

    nach eingabe in der sechsten zelle erfolgt der uebertrag zur uebersicht

    eventuelle anpassung der 6 (waere das F)
    eventuelle anpassung des vergebenen namens Uebersicht

    einzufuegen
    alt+f11/projektexplorer/DeineArbeitsMappe

    'ereigniss der arbeitsmappe
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    'abschaltung des genutzten ereignisses
    Application.EnableEvents = False
    'abfrage auf spalte 6 und AvtiveWorksheet
    If Target.Column = 6 And ActiveSheet.Name <> "Uebersicht" Then
    'copy der daten zum tabellenblatt uebersicht
    ActiveSheet.Range("A" & Target.Row & ":F" & Target.Row).Copy Worksheets("Uebersicht").Range("A" & Worksheets("Uebersicht").Cells(Rows.Count, 1).End(xlUp).Row + 1)
    'ende der abfrage auf spalte wie ActiveWorksheet
    End If
    'einschaltung des genutzten ereignisses
    Application.EnableEvents = True
    End Sub

    Antwort 7 von nighty vom 23.01.2021, 10:14 Options

    hi all :-)

    oder so :-)

    angenommen der sheetname waere der mitarbeitername

    dann waere hier noch eine variante die die mitarbeiternamen bzw sheetnamen in der spalte g darstellt

    gruss nighty

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Application.EnableEvents = False
        If Target.Column = 6 And ActiveSheet.Name <> "Uebersicht" Then
            ActiveSheet.Range("A" & Target.Row & ":F" & Target.Row).Copy Worksheets("Uebersicht").Range("A" & Worksheets("Uebersicht").Cells(Rows.Count, 1).End(xlUp).Row + 1)
            Worksheets("Uebersicht").Range("G" & Worksheets("Uebersicht").Cells(Rows.Count, 1).End(xlUp).Row) = ActiveSheet.Name
        End If
        Application.EnableEvents = True
    End Sub


    wobei ein macro ohne kommentare einfach huebscher aussieht :-))

    gruss nighty

    Antwort 8 von Sunshine.hh vom 23.01.2021, 23:14 Options

    Hallo an alle,

    vielen Dank für die Vorschläge!

    Ich dachte schon, mir kann keiner helfen...

    @siguru
    Zitat:
    Wäre es dann nicht sinnvoller, am Ende einer Bearbeitung (oder zu einem beliebigen Zeitpunkt) ein Makro zur Neu-Erstellung der Gesamtliste aufzurufen? D. h. nach der Eingabe passiert nichts automatisch, und erst nach Makro-Aufruf wird die alte Übersicht gelöscht und eine neue erzeugt?

    Hallo Siguru,
    wann die Aktualisierung der Übersicht geschieht ist relativ egal- ob beim Aufmachen der Tabelle oder beim Schleißen. Solange die Chronologie bleibt.
    Wie wäre dann der Script?



    @ nighty- es hat noch nicht funktioniert, ich probiere weiter. Danke!

    Antwort 9 von Sunshine.hh vom 23.01.2021, 23:39 Options

    Zitat:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 6 And ActiveSheet.Name <> "Uebersicht" Then
    ActiveSheet.Range("A" & Target.Row & ":F" & Target.Row).Copy Worksheets("Uebersicht").Range("A" & Worksheets("Uebersicht").Cells(Rows.Count, 1).End(xlUp).Row + 1)
    Worksheets("Uebersicht").Range("G" & Worksheets("Uebersicht").Cells(Rows.Count, 1).End(xlUp).Row) = ActiveSheet.Name
    End If
    Application.EnableEvents = True
    End Sub




    Das scheint grundsätzlich zu funktionieren. jedoch wenn nicht alle Zeilen ausgefüllt werden, bzw. erst später- dann werden die daten nicht in die übersicht kopiert und somit wohl in der übersicht "für immer" vergessen. Hier hat siguru recht.

    Ich würde mich auf einen weiteren Lösungsvorschlag freuen!

    Antwort 10 von nighty vom 24.01.2021, 07:17 Options

    hi Sunshine bzw all :-)

    dies war ein beispiel,daher aeussere konkret deine wuensche, das es gegebenenfalls angepasst werden koennte .an variationen gibt es viele :-))

    gruss nighty

    Antwort 11 von nighty vom 24.01.2021, 09:46 Options

    hi all :-)

    hier ein weiteres beispiel,mit einer erzwungenen eingabe sowie man die zellenbereiche a bis f befuellt

    gruss nighty

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Application.EnableEvents = False
        If Target.Column < 7 And ActiveSheet.Name <> "Uebersicht" Then
            Dim rgBereich As Range
            Dim zaehler As Range
            Set rgBereich = ActiveSheet.Range("A" & Target.Row & ",B" & Target.Row & ",C" & Target.Row _
            & ",D" & Target.Row & ",E" & Target.Row & ",F" & Target.Row)
            For Each zaehler In rgBereich
                If zaehler = "" Then
                    schalter = True
                    zaehler.Select
                    Exit For
                End If
            Next zaehler
            If schalter = False Then
                ActiveSheet.Range("A" & Target.Row & ":F" & Target.Row).Copy Worksheets("Uebersicht").Range("A" & Worksheets("Uebersicht").Cells(Rows.Count, 1).End(xlUp).Row + 1)
                Worksheets("Uebersicht").Range("G" & Worksheets("Uebersicht").Cells(Rows.Count, 1).End(xlUp).Row) = ActiveSheet.Name
            End If
        End If
        Application.EnableEvents = True
    End Sub

    Antwort 12 von sigiru vom 24.01.2021, 11:09 OptionsLösung

    Lösung
    Hallo Sunshine.hh,

    nachfolgend ein Beispiel, das zu Beginn die alte Übersicht löscht und dann aus den Tabellenblättern "B1" und "B2" eine neue Übersicht erstellt, die zum Schluß nach Datum sortiert wird. Für mehr als 2 Tabellenblätter muss der Code nur entsprechend kopiert und angepaßt werden.

    Ich bin in meinem Beispiel davon ausgegangen, dass die Überschrift aus genau einer Zeile besteht und die Daten überall in Zeile 2 beginnen, sowie dass ein Datum vorhanden ist und dieses in der 1. Spalte steht.

    Gruß sigiru

    --------------------
    Sub uebersicht_erstellen()
    
    Dim Zeilen As Integer ' Anzahl der Zeilen im jeweiligen Blatt
    Dim StartZ As Integer ' Start-Zeile im Übersichts-Blatt
    
    ' wenn alte Übersicht vorhanden, dann löschen
    
    If Worksheets("Übersicht").Cells(Rows.Count, 1).End(xlUp).Row > 1 Then
        Worksheets("Übersicht").Range("a2:f" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
    End If
    
    StartZ = 2
    
    ' B1 kopieren
    
    Zeilen = Worksheets("B1").Cells(Rows.Count, 1).End(xlUp).Row - 1
    
    Worksheets("B1").Range("A2:F" & Zeilen + 1).Copy _
    Destination:=Worksheets("Übersicht").Range("A" & StartZ & ":F" & StartZ + Zeilen - 1)
    
    StartZ = StartZ + Zeilen
    
    ' B2 kopieren
    
    Zeilen = Worksheets("B2").Cells(Rows.Count, 1).End(xlUp).Row - 1
    
    Worksheets("B2").Range("A2:F" & Zeilen + 1).Copy _
    Destination:=Worksheets("Übersicht").Range("A" & StartZ & ":F" & StartZ + Zeilen - 1)
    
    StartZ = StartZ + Zeilen
    
    ' sortieren
    
    Worksheets("Übersicht").Range("A2:F" & Cells(Rows.Count, 1).End(xlUp).Row).Sort _
            Key1:=Worksheets("Übersicht").Range("A2"), order1:=xlAscending, Header:=xlYes, Orientation:=xlTopToBottom
    
    End Sub

    Antwort 13 von nighty vom 24.01.2021, 13:11 Options

    hi all :-)

    na wird ja auch mal zeit das ideen zum vorschein kommen :-))

    @ sigiru
    die beiden integer var sollten aber als long deklariert sein :-)

    gruss nighty

    Antwort 14 von sigiru vom 24.01.2021, 13:35 Options

    Hi nighty,

    ja, das ist richtig. Wenn die Bearbeiter ganz fleißig Zeilen eingeben, ist man mit long natürlich auf der sicheren Seite :-)

    Gruß sigiru

    Antwort 15 von Sunshine.hh vom 25.01.2021, 11:53 Options

    Hallo nighty und sigiru,

    danke für eure Vorschläge!! Beide erfüllen meine Wünsche :)
    Ich tendiere jedoch zu der löschen/kopieren Version (sigiru), da gehen dann keine Daten verloren.

    Was mir aber noch fehlt, ist die Automatisierung, d.h. das Makro immer beim Speichern der Tabelle zu aktivieren.

    Würde mich auf die Antwort freuen!

    Antwort 16 von fedjo vom 25.01.2021, 13:07 Options

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dein Makro
    oder Call Makronamme

    End Sub

    Ähnliche Themen

    Zeilen aus Liste in jeweiliges Tabellenblatt kopieren
    Schnofsky  24.07.2007 - 48 Hits - 10 Antworten

    Aktuelles Tabellenblatt in Excel mit Makro kopieren
    TR007  22.12.2007 - 165 Hits - 2 Antworten

    autom.Verschieben von Zeilen in ein anderes Tabellenblatt
    Dude147  15.01.2008 - 22 Hits - 2 Antworten

    Makro ausführen auf 2. Tabellenblatt
    hpeter  12.02.2008 - 72 Hits - 10 Antworten

    Hinweis

    Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

    Neue Einträge

    Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026