Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Automatische Kopieren in zweites Tabellenblatt





Frage

hallo zusammen, ich habe das folgende problem und ich hoffe ihr koennt mir helfen. also ich habe eine excel datei welche aus zwei tabellenblaetter besteht. auf dem ersten tabellenblatt werden unter einander viele positionen aufgefuehrt mit beschreibenden details in den nach rechts verlaufenden feldern. das letzte feld pro zeile ist die genehmigung, gekennzeichnet durch "ja/nein". diese positionen werden einmal in der woche der leitungsebene zur genehmigung vorgelegt und diejenigen welche genehmigt werden entsprechend am ende jeder zeile der betreffenden position als "ja" fuer genehmigt gekennzeichnet. so far so good. wonach ich jetzt suche ist ein automatismus, gerne auch per knopfdruck, dass nach jeder genehmigungssitzung alle genehmigten positionen automatisch in das zweite tabellenblatt kopiert werden, welches vom format fast analog zum ersten ist, d.h. ersten werden aus dem ersten tabellenblatt pro zeile/genehmigter position lediglich eine auswahl von datenfeldern benoetigt, somit ist ein kopieren der gesamten zeile nicht sinnvoll. das theme ist nun, dass im ersten tabellenblatt nicht jede positionen genehmigt wird, so dass die nicht genehmigten positionen "luecken" ergeben und zeite problematik, auf der zeiten seite soll ein fortlaufenden logbuch entstehen, d.h. nach jeder genehmigungssitzung werden ongoing alle genehmigten positionen dort dargestellt und damit die herausforderung die neu genehmigten positionen sollten automatisch, wenn genehmigt, in die letzte leere zeile des zweiten tabellenblattes kopiert werden. ich denke hier ist eine makro-loesung gefragt. hat jemand von euch eine idee? gerne stelle ich auch die entsprechende datei als ansicht zur verfuegung. vielen dank. gruss dvdh

Antwort 1 von Beverly

Hi,

da ich nicht weiß, in welcher Spalte ja/nein stehen, hiermal ein Code für Spalte J (10)

Sub kopieren()
    Dim loZeile1 As Long
    Dim loZeile2 As Long
    loZeile2 = IIf(IsEmpty(Worksheets("Tabelle2").Cells(Worksheets("Tabelle2").Rows.Count, 1)), Worksheets("Tabelle2").Cells(Worksheets("Tabelle2").Rows.Count, 1).End(xlUp).Row, Worksheets("Tabelle2").Rows.Count) + 1
    With Worksheets("Tabelle1")
        For loZeile1 = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) To 2 Step -1
            If .Cells(loZeile1, 10) = "ja" Then
                .Cells(loZeile1, 1).EntireRow.Copy Worksheets("Tabelle2").Cells(loZeile2, 1)
                .Cells(loZeile1, 1).EntireRow.Delete shift:=xlUp
                loZeile2 = loZeile2 + 1
            End If
        Next loZeile1
    End With
End Sub


Kopeirt wird aus Tabelle1 nach Tabelle2, ab Zeile2. Vorausgesetzt wird, dass Spalte A immer ausgefüllt ist.

Bis später,
Karin

Antwort 2 von dvdh

hallo karin,
danke für deine nachricht.
irgendwie bekomme ich das nicht richtig hin mit dem hineinkopieren. darf ich vielleicht die unverschämte bitte äußern, dass ich dir die datei schicken darf? aus datenschtuzgruenden hier meine adresse zur veröffentlichung und ich schicke dir dann die datei zu wenn du mir mailst, nur falls nicht zu unverschämt.
weiterhin weiß ich noch nicht richtig, was du meinst dass dieses macro nur funktioniert, wenn spalte A immer gefüllt ist. was meinst du damit genau?

dirk@sportligen.de

gruss
dvdh

Antwort 3 von Beverly

Hi,

versuchen wir es doch erst einmal auf diesem Weg: was bekommst du denn nicht hin - den Code einzufügen? Mach einen Rechtsklick auf den Tabellenreiter -> Code anzeigen und schon bist du in der VBA-Umgebung. Dort gibt es ebenfalls Symbolleisten. Gehe auf Einfügen -> Modul und in das rechte Fenster kopierst du dann den Code. Anschließend kannst du ganz normal wieder in die Tabelle zurückkehren.

Mit "Spalte A immer gefüllt" meinte ich, dass bis zur letzten Zeile Werte drin stehen, oder zumindest in der letzten Zeile, weil bis dahin gezählt wird und von dort aus rückwärts die Werte in die andere Tabelle übertragen und dann die übertragenen Zeilen gelöscht werden. Falls nicht Spalte A, kann man auch eine andere nehmen und den Code entsprechend ändern.

Bis später,
Karin

Antwort 4 von dvdh

hallo,
dann probieren wir es weiter so.
ist mein verständnis richtig, dass ich deine worte tabelle 1und 2 manuell der bezeichnung meiner tabellen anpassen muss? weiterhin ist mir bis jetzt unklar wo im makro ist meine zeile eintragen muss, wo die ja/nein entscheidung eingetragen wird, dies ist bei mir spalte O beginnend zeile 12. weiterhin müssen bei einer "ja" entscheidung aus der ersten tabelle lediglich die spalten b, c, e, f, g, h und j übernommen werden in die tabelle 2 in jeweils denselben spalten, ebenfalls beginnend mit zeile 12.

nur zum verständnis, diese makro stellt sicher, dass wenn bei "ja" die entsprechende zeile bzw. wenn möglich die anpassung die genannten spalten kopiert werden in die tabelle 2 und dass dies untereinander geschieht und keine freiräume sind?

trotz allem schon einmal vielen dank für die bisherige mühe.

gruss
dvdh

Antwort 5 von Beverly

Hi,

mit den Tabellennamen das siehst du richtig.

Wie sollte der Ablauf denn genau sein - es gibt ja 2 Möglichkeiten:

1. sofort bei jedem Eintrag von "ja" in Spalte O werden die Zellen kopiert und gelöscht

2. am Ende der Woche werden alle in Spalte O mit "ja" gekennzeichneten Zeilen auf einmal kopiert und gelöscht

Der jetztige Code ist so geschreiben, dass er nach der 2. Möglichkeit arbeitet, d.h. er kann aufgerufen werden wenn es erforderlich ist. In der 2. Tabelle werden keine Freiräume gelassen. Allerdings erfolgt das Kopieren von unten nach oben, weil das einfacher ist, kann man aber auch von oben nach unten machen.

Nur bestimmte Zellen kopieren ist kein Problem, auch dass der Code erst ab der 12. Zeile agiert. Du müsstest aber erst einmal sagen, welche Variante du wählst, weil davon die Programmierung abhängt.

Bis später,
Karin

Antwort 6 von dvdh

hallo,
also die zweite variante halte ich für besser. außerdem wäre es gut wenn die kopierte auswahl aus den zeilen aus tabelle 1 nicht gelöscht werden, sondern dort weiterhin aufgeführt werden.
ist es möglich den code entsprechend zu programmieren?

vielen dank dieser stelle schon einmal für die super unterstützung.

gruss
dvdh

Antwort 7 von Beverly

Hi,

versuche es mal mit diesem Code

Sub uebernehmen()
    Dim loZeile1 As Long
    Dim loZeile2 As Long
    loZeile2 = IIf(IsEmpty(Worksheets("Tabelle2").Cells(Worksheets("Tabelle2").Rows.Count, 1)), Worksheets("Tabelle2").Cells(Worksheets("Tabelle2").Rows.Count, 1).End(xlUp).Row, Worksheets("Tabelle2").Rows.Count) + 1
    With Worksheets("Tabelle1")
        For loZeile1 = 12 To IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
            If .Cells(loZeile1, 15) = "ja" Then
                Worksheets("Tabelle2").Cells(loZeile2, 2) = .Cells(loZeile1, 2)
                Worksheets("Tabelle2").Cells(loZeile2, 3) = .Cells(loZeile1, 3)
                Worksheets("Tabelle2").Cells(loZeile2, 5) = .Cells(loZeile1, 5)
                Worksheets("Tabelle2").Cells(loZeile2, 6) = .Cells(loZeile1, 6)
                Worksheets("Tabelle2").Cells(loZeile2, 7) = .Cells(loZeile1, 7)
                Worksheets("Tabelle2").Cells(loZeile2, 8) = .Cells(loZeile1, 8)
                Worksheets("Tabelle2").Cells(loZeile2, 10) = .Cells(loZeile1, 10)
                loZeile2 = loZeile2 + 1
            End If
        Next loZeile1
    End With
End Sub


Bis später,
Karin

Antwort 8 von dvdh

hallo,
ich habe das makro jetzt hineinkopiert und die namen der tabellenblätter angepasst. wie kann ich das makro nun testweise laufen lassen?

gruss
dvdh

Antwort 9 von Beverly

Hi,

ich hoffe, du hast dir eine Kopie deiner Daten angelegt?

Gehe auf Extras -> Makro -> Makros -> uebernehmen auswählen -> Ausführen.

Bis später,
Karin

Antwort 10 von dvdh

hallo,
habe ich gemacht, allerdings geschieht nichts. mache ich etwas falsch? vielleicht doch mal datei schicken?

Antwort 11 von Beverly

Hi,

ein letzter Versuch, dann schicken - OK?

Im Code wird in Spalte A geprüft, bis zu welcher Zeile Werte drinstehen. Deshalb hatte ich geschrieben, dass Spalte A ausgefüllt sein muss. Wenn dies nicht der Fall ist, dann läuft der Code nicht richtig, weil die letzte belegte Zelle nicht richtig ermittelt wird. Du musst den Code dann entsprechend ändern und eine andere Spalte verwenden, die bis unten ausgefüllt ist. Das musst du in diesem Codeteil tun .Rows.Count, 1 . Die 1 ist Spalte A. Dieser Codeteil kommt an 2 Stellen in derselben Codezeile vor, musst du also an beiden entsprechend ändern. Die andere Möglichkeit ist, du trägst in der letzten Zelle der Spalte A einen (beliebigen) Wert ein und formatierst die Schriftfarbe identisch mit der Füllfarbe der Zelle, sodass die Zelle leer erscheint.

Bis später,
Karin

Antwort 12 von dvdh

halo,
ich probiere es mal aus und melde mich morgen früh.

gruss
dvdh

Antwort 13 von dvdh

hallo,
das makro funktioniert bei mir nicht. spalte 1 ist gefüllt und ich habe auch versucht das makro auf eine andere spalte (2 & 3) zu codieren, aber nichts geschieht.

noch eine idee woran es liegen könnte?

gruss
dvdh

Antwort 14 von Beverly

Hi,

nein, keine weiteren Ideen.

Schicke mir die Datei. Auf meiner HP Beverly's Excel-Inn findest du unter Feedback meine Mailadresse.

Heute komme ich aber wahrscheinlich nicht mehr dazu, mich mit dem Problem zu beschäftigen.

Gruß
Karin

Antwort 15 von dvdh

hallo,
ich weiß gar nicht wie ich mich bedanken soll.
habe die datei an die angegebene adresse geschickt, wäre wirklich super wenn du mal drübe gucken könntest.

gruss
dvdh

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: