Tresorsumme vom Vortag anzeigen und summieren
#11
Hallo,

den  Button (Active-X Steuerelement) hast du sicherlich schon auf dem Tabellenblatt eingebaut.

Dann deinen Wunsch entsprechend so:
Code:
Private Sub CommandButton1_Click()
    Dim iDatum As Variant
    With Tabelle1
        iDatum = Application.Match(.Cells(1, 12), .Columns(6), 0)
        If Not IsError(iDatum) Then
            .Cells(iDatum, 9) = .Cells(iDatum, 9) + .Cells(4, 9)
            .Cells(4, 9) = 0
        End If
    End With
End Sub

Gruß Uwe
Antworten Top
#12
Hallo,

in deiner Datei unter #8 gibt es nur Einlagen. Herausgenommen wird nichts?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#13
Hallo,

anbei ein Lösungsvorschlag ohne Schaltfläche. Das Makro gehört in das Modul des Tabellenblattes.

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim varRow As Variant
    varRow = Application.Match(Cells(1, 12), Columns(6), 0)
    Cells(varRow, 9) = Cells(varRow - 1, 9) + Cells(4, 9)
End Sub
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#14
Das kann man machen, dabei gibt es jedoch eine Schwierigkeit und das würde ich mir an Deiner Stelle gut überlegen!
Damit das ganze funktioniert müssen an allen Tagen an denen noch keine Buchung war die Zellen leer sein!

Das Problem ist das keine Buchhaltung stattfindet, gebe ich 10 ein und dann nochmal 20, dann müssen wir bei der 1. Eingabe =Vortag+10 rechnen, bei der nächsten Eingabe jedoch =Aktuell+20 sonst ist das Ergebnis falsch.

Wenn man sich also mal vertippt / vertan hat, dann kriegt man eine falsche Buchung nie mehr rausgerechnet/storniert oder gar zurückverfolgt... und da nach der Ausführung von VBA auch kein Undo mehr geht auch nicht mehr in Excel.

Hier ist der Code für Deine Beispieldatei:
Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim R As Range, Vortag As Range
  Select Case Target.Address(0, 0)
    Case "I4"
      If Not IsNumeric(Target) Then
        MsgBox "Es muss eine Zahl eingegeben werden", vbExclamation
        Exit Sub
      End If
      'Suche das Datum ab F7
      For Each R In Range("F7", Range("F" & Rows.Count).End(xlUp))
        If R.Value2 = Range("L1").Value2 Then
          'Ziel in Spalte I
          Set R = Range("I" & R.Row)
          Application.EnableEvents = False
          On Error GoTo ErrorHandler
          'Haben wir einen aktuellen Betrag?
          If IsEmpty(R) Then
            'Nein, neuer Betrag inkl. Vortag
            Set Vortag = R.Offset(-1)
            'Falls die Vortage leer sind, den letzten Betrag suchen
            Do While IsEmpty(Vortag)
              Set Vortag = Vortag.Offset(-1)
            Loop
            R = Vortag + Target
          Else
            'Aufaddieren
            R = R + Target
          End If
          'Zeigen das alles Ok ist
          Target.ClearContents
          Application.EnableEvents = True
          Exit For
        End If
      Next
      If R Is Nothing Then
        MsgBox "Tag " & Range("L1") & " nicht gefunden"
      End If
  End Select
  Exit Sub

ErrorHandler:
  If IsEmpty(R) Then
    MsgBox "Kein numerischer Wert am Vortag?", vbExclamation, "Betrag nicht verrechnet"
  Else
    MsgBox "Kein numerischer Wert am aktuellen Tag?", vbExclamation, "Betrag nicht verrechnet"
  End If
  Application.EnableEvents = True
End Sub

Bei Finanzsystemen macht man eigentlich eine Protokollierung JEDER Buchung mit Datum,Uhrzeit,Name,Betrag und Anlass/Notiz, so wie Du es auf Deinem Kontoauszug siehst. Alle Buchungen schreibt man stumpf untereinander und dann kann man für jeden beliebigen Zeitpunkt daraus den aktuellen Stand berechnen.

So könnte das aussehen:
   

Gibt man ein Datum in A5 ein, dann wird die laufende Summe bis einschließlich zu dem Tag berechnet. Andernfalls sieht man die aktuelle Summe.

Eine Buchung gibt man in D2:E2 ein, das Datum/Uhrzeit kommen aus dem PC, der Name aus Excel, die Buchung wird der Tabelle in A7 hinzugefügt.

Das wäre es dann auch schon... nix kompliziertes, keine Bedingungen.

BTW, wegen Deiner PN: Ich hatte Dir über das Forum hier eine eMail geschickt... ist die angekommen? Hast Du damit auch meine eMail-Adresse bekommen?

Andreas.
Antworten Top
#15
Hallo Andreas,

du hast vollständig recht, deshalb verweise ich hier noch mal auf meinen Beitrag unter #7.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#16
Zitat:Zum besseren Verständnis habe ich eine stark vereinfachte Tabelle angehängt.

Das heißt, dass am Ende eine passende Lösung an die reale Welt angepasst werden muss, oder auch komplett anders aussieht. Das hält mich dann meist ab, voreilig konkrete Lösungen zu entwickeln.
Antworten Top
#17
Vielen Dank an alle Helfer  18 18 habe mich für die Lösung von Andreas entschieden, sie kommt meinen Vorstellungen am nächsten. 
Nochmals Danke an alle!!!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste