Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Betrag gestaffelt nach Jahren genau aufteilen
#31
Lieber Bosco,

diese Funktioniert.
Ich konnte keinen Fehler errkennen.
Code:
=WENNFEHLER((DATEDIF(MAX($A14;(MONATSENDE(D$1;-12)+1));MIN(D$1;$B14);"YM")+1)*$C14/(DATEDIF($A14;$B14;"M")+1);0)

Gerne könnte noch jemand das prüfen. 19
Antworten Top
#32
Hallo Liesl,

Dann schau' Dir bitte die anliegende Datei genauer an (Bereitstellung ohne jede Gewährleistung, aber ich verwende einen aktuellen Virenscanner).

Alle bisher vorgeschlagenen Formellösungen sind m. E. fehlerhaft, d. h. nicht gut (genug) programmiert und nicht gut (genug) getestet.

Sigi.21's VBA Lösung und meine Formellösung sind meines Erachtens korrekt, aber prüfe es bitte selbst.

Der bereitgestellte Test checkt lediglich, ob Sigi.21's und meine Berechnungen für alle Kombinationen zwischen 31.12.2003 und 1.1.2006 nahezu identisch sind.

Aber auch Sigi.21's und meine Lösung lassen sich noch verbessern, siehe http://www.bplumhoff.de/roundtosum_de/

Allgemein lautet meine Empfehlung für Geldbetragsverteilungen: defensiv prgrammieren! Eine Gewichtsfunktion kann zunächst die gewünschte Verteilung bestimmen. Anschließend sollte die Betragsverteilung mithilfe der Gewichtssumme erfolgen, um sicherzustellen, dass genau der vorhandene Betrag und keine andere (fehlerhafte!) Summe verteilt wird.

Viele Grüße,
Bernd


Angehängte Dateien
.xlsm   CEF_Betrag gestaffelt nach Jahren genau aufteilen.xlsm (Größe: 77,1 KB / Downloads: 6)
Antworten Top
#33
Man muss entscheiden ob Monatsgenau oder Tagsgenau gearbeitet werden muss.
Für eine Tagsgenaue Berechnung:


Code:
Sub M_snb()
  sn = Tabelle8.Cells(1).CurrentRegion
  y = sn(2, 3) / (sn(2, 2) - sn(2, 1))
 
  For jj = 4 To 12
    If Year(sn(1, jj)) >= Year(sn(2, 1)) And Year(sn(1, jj)) <= Year(sn(2, 2)) Then
      Select Case Year(sn(1, jj))
      Case Year(sn(2, 1))
          sn(3, jj) = (DatePart("y", sn(1, jj)) - DatePart("y", sn(2, 1))) * y
      Case Year(sn(2, 2))
          sn(3, jj) = DatePart("y", sn(2, 2)) * y
        Case Else
          sn(3, jj) = DatePart("y", sn(1, jj)) * y
        End Select
    End If
  Next
End Sub

Mein Excelformel war Monatsgeanu bestimmt.

Wenn Monatgenau gearbeitet werden muss sollen die Tage immer  identische Monatstage sein:
Dann ist 30-04-2001 bis 30-04-2006 richtig und ist 30-04-2002 bis 01-05-2006 falsch.
Die Genauigkeit bestimmt also die Eintragswerten.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#34
(28.06.2022, 14:50)snb schrieb: Man muss entscheiden ob Monatsgenau oder Tagsgenau gearbeitet werden muss.
Für eine Tagsgenaue Berechnung:


Code:
Sub M_snb()
  sn = Tabelle8.Cells(1).CurrentRegion
  y = sn(2, 3) / (sn(2, 2) - sn(2, 1))
 
  For jj = 4 To 12
    If Year(sn(1, jj)) >= Year(sn(2, 1)) And Year(sn(1, jj)) <= Year(sn(2, 2)) Then
      Select Case Year(sn(1, jj))
      Case Year(sn(2, 1))
          sn(3, jj) = (DatePart("y", sn(1, jj)) - DatePart("y", sn(2, 1))) * y
      Case Year(sn(2, 2))
          sn(3, jj) = DatePart("y", sn(2, 2)) * y
        Case Else
          sn(3, jj) = DatePart("y", sn(1, jj)) * y
        End Select
    End If
  Next
End Sub

Mein Excelformel war Monatsgeanu bestimmt.

Wenn Monatgenau gearbeitet werden muss sollen die Tage immer  identische Monatstage sein:
Dann ist 30-04-2001 bis 30-04-2006 richtig und ist 30-04-2002 bis 01-05-2006 falsch.
Die Genauigkeit bestimmt also die Eintragswerten.
Nein. Egal, ob man nach Monaten oder Tagen abrechnet, sollten für legale Eingabewerte auch ordentliche Resultate ausgegeben werden.
Wenn Deine Formel für nicht-vorgesehene Eingaben murkst, dann limitiere die möglichen Eingaben.
Sonst bleibt es Murks.
Antworten Top
#35
Du hast offensichtlicht den letzte Code nicht getestet.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#36
In Excel Formel:

PHP-Code:
=IF(OR(YEAR(D$1)<YEAR($A2);YEAR(D$1)>YEAR($B2));"";IF(YEAR($A2)=YEAR(D$1);D$1-$A2;IF(YEAR($B2)=YEAR(D$1);$B2-DATE(YEAR($B2);1;0);D$1-DATE(YEAR(D$1);1;0)))*$C2/($B2-$A2)) 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#37
Alternative Schreibweise, ohne nested IF's

PHP-Code:
=CHOOSE(1+(YEAR(D$1)<YEAR($A2))+(YEAR(D$1)>YEAR($B2))+2*(YEAR($A2)=YEAR(D$1))+3*(YEAR($B2)=YEAR(D$1));D$1-DATE(YEAR(D$1);1;0);0;D$1-$A2;$B2-DATE(YEAR($B2);1;0))*$C2/($B2-$A2
Weil die Formel Tagesgenau berechnet werden Schaltjahre auch miteinbezogen.

z.B 30-04-2003 bis 01-05-2005
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#38
(29.06.2022, 09:20)snb schrieb: Alternative Schreibweise, ohne nested IF's

PHP-Code:
=CHOOSE(1+(YEAR(D$1)<YEAR($A2))+(YEAR(D$1)>YEAR($B2))+2*(YEAR($A2)=YEAR(D$1))+3*(YEAR($B2)=YEAR(D$1));D$1-DATE(YEAR(D$1);1;0);0;D$1-$A2;$B2-DATE(YEAR($B2);1;0))*$C2/($B2-$A2
Weil die Formel Tagesgenau berechnet werden Schaltjahre auch miteinbezogen.

z.B 30-04-2003 bis 01-05-2005

Deine Formel ist Murks.
1. Liesl fragte nach einer Formellösung für eine Abrechnung nach Monaten, nicht nach Tagen.
2. Für die Periode 28.2.2004 - 29.2.2004 gibt Deine o. g. Formel einen Fehler aus.

Falls Du weitere Hilfe für Deine fehlerhaften Formeln benötigst, mach' bitte einen eigenen Thread auf. Hier bist Du off-topic.
Antworten Top


Gehe zu:


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