423 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

ich habe eine Excel Tabelle in die ich alle meine (Geld-) Ausgaben eintrage (Datum, welche Karte, wofür...). Sobald ich eine Ausgabe mit dem Kontoauszug verifiziert habe, möchte ich einen Button in der ersten Spalte drücken und daraufhin wird diese Zeile in das Tabellenblatt "Erledigt" verschoben und die unteren Zeilen rücken auf.

Im Blatt "Erledigt" sollen alle dazu kommenden Einträge einfach an die letzte Stelle kopiert werden.

So sollten im ersten Blatt "Ausgaben" nur die neuen, nicht verifizierten Beträge zu sehen sein, während in "Erledigt" alle verifizerten Ausgaben zu finden sind, so dass ich auch noch später darauf Zugriff habe.

Ich würde mich freuen, wenn mir jemand helfen kann. Noch eine Bitte: ich bin kein Programmierer, also hätte ich die Lösung gerne "mundgerecht" aufbereitet...:-)

Vielen Dank im voraus, für schnelle und kompetente Hilfe.

4 Antworten

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

du benötigst keinen Button - es reicht z.B. ein Doppelklick in Spalte A der betreffenden Zeile, damit die Daten übertragen werden. Dazu folgenden Code ins Codemodul der Tabelle "Ausgaben":

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim lngErste As Long
    ' Doppelklick in Spalte A
    If Target.Column = 1 Then
        ' Zellen in Spalte C und D sind identisch und nicht leer
        If (Target.Offset(0, 2) = Target.Offset(0, 3)) And _
            (Target.Offset(0, 2) <> "" And Target.Offset(0, 3) <> "") Then
            Cancel = True
            With Worksheets("Erledigt")
                ' erste freie Zeile ermitteln
                lngErste = IIf(IsEmpty(.Cells(Rows.Count, 1)), _
                    .Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) + 1
                ' Zielzeile kopieren in erste freie Zeile kopieren
                Target.EntireRow.Copy .Cells(lngErste, 1)
                ' Zielzeile löschen
                Target.EntireRow.Delete
            End With
        End If
    End If
End Sub


Leider weiß ich nicht, in welchen Spalten deine zu vergleichenden Werte stehen - ich bin mal von Spalte C und Spalte D ausgegangen, was du an deine Bedingungen anpassen musst. Der Zehlenwert bei .Offset(0, Zahl) gibt an, wieviel Spalten rechts neben der Doppelklickspalte der zu betrachtende Wert steht - im Beispiel gibt 2 an, dass der zu betrachtende Wert 2 Spalten rechts von A, also in C steht. .Offset(0, 3) heißt dann also, 3 Spalten rechts neben A, also in D.

Den Code fügst du ein, indem du einen Rechtsklick auf den Reiter (unten) der Tabelle "Ausgaben" machst -> Code anzeigen und dann den Code in das rechte (obere) Codefenster kopierst.

Bis später, Karin

0 Punkte
Beantwortet von
Hallo Karin,

super schnelle Antwort, aber ich habe mich missverständlich ausgedrückt: ich will keine Werte innerhalb der Tabelle verifizieren, sonden den Wert in Excel mit dem Kontoauszug. Sollten beide Werte gleich sein, möchte ich, dass die ganze Zeile verschwindet und im Blatt "Erledigt" auftaucht.

Kannst Du mir den Code bitte dahingehend anpassen?

Danke, Peter
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Peter,

wenn die Werte nicht im Tabellenblatt verglichen werden sollen, dann ändere den Code wie folgt:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim lngErste As Long
    If Target.Column = 1 Then
        Cancel = True
        With Worksheets("Erledigt")
            ' erste freie Zeile ermitteln
            lngErste = IIf(IsEmpty(.Cells(Rows.Count, 1)), _
                .Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) + 1
            ' Zielzeile kopieren in erste freie Zeile
            Target.EntireRow.Copy .Cells(lngErste, 1)
            ' Zielzeile löschen
            Target.EntireRow.Delete
        End With
    End If
End Sub

Das bedeutet, dass du selbst entscheidest, ob die Zeile übertragen werden soll.


Bis später, Karin

0 Punkte
Beantwortet von
Hallo Karin,

...ein Traum. Funktioniert perfekt.

Vielen Dank und Gruß, Peter
...