Excel rechnet bei adition vonm 31.12.1899
#1
Hallo zusammen,

ich bräuchte für folgendes Problem Hilfe:

Ich habe in einer Tabelle über VBA folgende Funktion hinterlegt: "M3" +  "N3" = "O3"

In "M3" steht ein Datum: zb. 10.10.2019 (Zellformation: Datum)
in "N3" steht eine Zahl: zb. 10 (Zellformation: Standard)
in "O3" steht wiederum ein Datum bzw. Das Ergebnis aus "10.10.2019" + "10"

Allerdings rechnet Excel hier immer vom 31.12.1899 aus. (also Tag 0 ist der 31.12.1899)

Könnte mir bitte jemand bescheid geben woran das liegen könnte?

Vielen Dank
Top
#2
Moin!
Das ist schlicht so festgelegt, dass für Excel der 1.1.1900 der erste gültige Tag ist.
https://www.online-excel.de/excel//singsel.php?f=128

VBA kann übrigens mit Daten ab dem 1.1.100 rechnen.

Verrätst Du mir, warum Du für Dein Vorhaben überhaupt VBA benötigst?
Schließlich kann Excel problemlos mit Daten rechnen.
Außerdem gibt es diverse spezielle Funktionen in der Funktionsbibliothek Datum und Uhrzeit.
(zusätzlich noch das nicht dokumentierte =DATEDIF())
http://www.0711office.de/excel/funktionen/datedif.htm

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
Hallo,

bei mir funktioniert das:

Tabelle1

MNO
310.10.20191020.10.2019
Formeln der Tabelle
ZelleFormel
O3=M3+N3

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Ich hoffe du hast das in deiner Liste nicht auch in Anführungszeichen geschrieben.

Hatte gar nicht registriert, dass du da mit VBA arbeitest, für diese eine Berechnung ist das ja schon etwas überzogen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#4
Sicher, das die Formatierung der Zellen auch "normal" ist?
Aber denke das ist ja nur ein Ausschnitt von dem, was VBA macht, oder?
Top
#5
Mal eine kleines Rätsel … Wink
Was ist hier los?
AB
101.01.19001

ZelleFormel
B1=A1

Hingegen (Direktfenster):
Code:
?CInt(#1/1/1900#)
2

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#6
......
Top
#7
Formatierung ist Datum / Standard / Datum. Wie geschrieben.
Tatsächlich ist das nur ein Ausschnitt (rot) von dem was VBA macht. Unten mal der Komplette Code.

Übersehe ich irgendwas oder bin ich einfach nur blöd? Zum Glück ist Freitag.


Code:
Private Sub Worksheet_Change

If Target.Count > 1 Then Exit Sub

If Target.Row > 2 Then

If Target.Column = 13 Or Target.Column = 14 Then

Select Case Target.Column

Case 13

Target.Offset(, 2) = WorksheetFunction.Sum(Target, Target.Offset(, 1))

Case 14

Target.Offset(, 1) = WorksheetFunction.Sum(Target, Target.Offset(, -1))

Case Else

'nix machen

End Select

End If

End If

If Target.Cells.Count > 1 Then Exit Sub

If Intersect(Target, Me.Range("E3:AH44")) Is Nothing Then Exit Sub

On Error GoTo CleanUp:

With Target

If .Value <> "" Then

Application.EnableEvents = False

.Value = UCase(.Value)

End If

End With

CleanUp:

Application.EnableEvents = True

If Target.Column = 12 And Target.Row >= 3 And Target.Count = 1 Then

If IsNumeric(Target.Offset(, -1)) Then

If Target.Value = 7.7 Then

Target = Target.Offset(, -1) * 1.077

ElseIf Target.Value = 19 Then

Target = Target.Offset(, -1) * 1.19

End If

Else

Application.EnableEvents = False

Target = ""

Application.EnableEvents = True

MsgBox "Es ist kein Zahlenwert in Spalte K."

End If

End If

If Target.Column = 7 And Target.Row > 3 Then

If UCase(Target) = "RE" Then

Application.EnableEvents = False

Target.Offset(, 1) = 83

Target.Offset(, 2) = Target.Offset(-1, 2) + 1

Target.Offset(, 3) = 1900

Application.EnableEvents = True

ElseIf UCase(Target) = "GU" Then

Application.EnableEvents = False

Target.Offset(, 1) = 83

Target.Offset(, 2) = Target.Offset(-1, 2)

Target.Offset(, 3) = Target.Offset(-1, 3) + 1

Target.Offset(, 4) = Target.Offset(-1, 4) * (-1)

Target.Offset(, 5) = Target.Offset(-1, 5) * (-1)

Target.Offset(, 6) = Date

Target.Offset(, 8) = Date

Target.Offset(, 12) = Date

Target.Offset(, 11) = Target.Offset(, 4)

Target.Offset(, 7) = Target.Offset(-1, 7)

Target.Offset(0, -5).Resize(1, 5).Value = Target.Offset(-1, -5).Resize(1, 5).Value

Target.Offset(1, -5).Resize(1, 5).Value = Target.Offset(-1, -5).Resize(1, 5).Value

Target.Offset(1) = "RE-02"

Target.Offset(1, 1) = 83

Target.Offset(1, 1) = Target.Offset(1, 1)

Target.Offset(1, 2) = Target.Offset(, 2)

Target.Offset(1, 3) = Target.Offset(, 3) + 1

Application.EnableEvents = True

End If

End If

If Not Target.Column = 5 Then Exit Sub

If Not Target.Row > 2 Then Exit Sub

Select Case LCase(Target.Value)

Case "hamu"

Me.Cells(Target.Row, 6).Value = "BP"

Case "cwi", "mass", "casc", "scbe"

Me.Cells(Target.Row, 6).Value = "BS"

Case "unul", "wert"

Me.Cells(Target.Row, 6).Value = "MUE"

Case "spt"

Me.Cells(Target.Row, 6).Value = "intern"

Case Else

Me.Cells(Target.Row, 6).Value = "XXX"

End Select

If Not Target.Column = 5 Then Exit Sub

If Not Target.Row > 2 Then Exit Sub

Dim tRow As Long

tRow = Target.Row

Select Case LCase(Target.Value)

Case "hamu"

Me.Cells(tRow, 22).Value = "hafu@gruner.eu"

Case "cwi"

Me.Cells(tRow, 22).Value = "cwi@gruner.eu"

Case "casc"

Me.Cells(tRow, 22).Value = "casc@gruner.eu"

Case "mass"

Me.Cells(tRow, 22).Value = "mass@gruner.eu"

Case "unul"

Me.Cells(tRow, 22).Value = "unul@gruner.eu"

Case "spt"

Me.Cells(tRow, 22).Value = "spt@gruner.eu"

End Select

If Target.Count > 1 Then Exit Sub

If Target.Row > 2 Then

If Target.Column = 13 Or Target.Column = 14 Then

Select Case Target.Column

Case 13

Target.Offset(, 2) = WorksheetFunction.Sum(Target, Target.Offset(, 1))

Case 14

Target.Offset(, 1) = WorksheetFunction.Sum(Target, Target.Offset(, -1))

Case Else

'nix machen

End Select

End If

End If

End Sub
Top
#8
Lösche mal beide Beiträge und stelle uns den Code vernünftig (Code-Tags und Einrückungen) vor.
Oben bekomme ich Augenkrebs! Wink
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#9
(11.01.2019, 12:09)RPP63 schrieb: Lösche mal beide Beiträge und stelle uns den Code vernünftig (Code-Tags und Einrückungen) vor.
Oben bekomme ich Augenkrebs! Wink
Hehe, ja ist irgendwie verständlich.


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Row > 2 Then
    If Target.Column = 13 Or Target.Column = 14 Then
        Select Case Target.Column
            Case 13
                Target.Offset(, 2) = WorksheetFunction.Sum(Target, Target.Offset(, 1))
            Case 14
                Target.Offset(, 1) = WorksheetFunction.Sum(Target, Target.Offset(, -1))
            Case Else
                'nix machen
        End Select
    End If
End If
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Target, Me.Range("E3:AH44")) Is Nothing Then Exit Sub
On Error GoTo CleanUp:
With Target
    If .Value <> "" Then
        Application.EnableEvents = False
        .Value = UCase(.Value)
    End If
End With
CleanUp:
    Application.EnableEvents = True
   
   
If Target.Column = 12 And Target.Row >= 3 And Target.Count = 1 Then
    If IsNumeric(Target.Offset(, -1)) Then
        If Target.Value = 7.7 Then
            Target = Target.Offset(, -1) * 1.077
        ElseIf Target.Value = 19 Then
            Target = Target.Offset(, -1) * 1.19
        End If
    Else
        Application.EnableEvents = False
        Target = ""
        Application.EnableEvents = True
        MsgBox "Es ist kein Zahlenwert in Spalte K."
    End If
End If
If Target.Column = 7 And Target.Row > 3 Then
    If UCase(Target) = "RE" Then
        Application.EnableEvents = False
        Target.Offset(, 1) = 83
        Target.Offset(, 2) = Target.Offset(-1, 2) + 1
        Target.Offset(, 3) = 1900
        Application.EnableEvents = True
    ElseIf UCase(Target) = "GU" Then
        Application.EnableEvents = False
        Target.Offset(, 1) = 83
        Target.Offset(, 2) = Target.Offset(-1, 2)
        Target.Offset(, 3) = Target.Offset(-1, 3) + 1
        Target.Offset(, 4) = Target.Offset(-1, 4) * (-1)
        Target.Offset(, 5) = Target.Offset(-1, 5) * (-1)
        Target.Offset(, 6) = Date
        Target.Offset(, 8) = Date
        Target.Offset(, 12) = Date
        Target.Offset(, 11) = Target.Offset(, 4)
        Target.Offset(, 7) = Target.Offset(-1, 7)
        Target.Offset(0, -5).Resize(1, 5).Value = Target.Offset(-1, -5).Resize(1, 5).Value
        Target.Offset(1, -5).Resize(1, 5).Value = Target.Offset(-1, -5).Resize(1, 5).Value
        Target.Offset(1) = "RE-02"
        Target.Offset(1, 1) = 83
        Target.Offset(1, 1) = Target.Offset(1, 1)
        Target.Offset(1, 2) = Target.Offset(, 2)
        Target.Offset(1, 3) = Target.Offset(, 3) + 1
        Application.EnableEvents = True
    End If
End If
   
If Not Target.Column = 5 Then Exit Sub
If Not Target.Row > 2 Then Exit Sub
   
Select Case LCase(Target.Value)
    Case "hamu"
        Me.Cells(Target.Row, 6).Value = "BP"
    Case "cwi", "mass", "casc", "scbe"
        Me.Cells(Target.Row, 6).Value = "BS"
    Case "unul", "wert"
        Me.Cells(Target.Row, 6).Value = "MUE"
    Case "spt"
        Me.Cells(Target.Row, 6).Value = "intern"
    Case Else
        Me.Cells(Target.Row, 6).Value = "XXX"
End Select
       
If Not Target.Column = 5 Then Exit Sub
    If Not Target.Row > 2 Then Exit Sub
   
    Dim tRow As Long
        tRow = Target.Row
       
    Select Case LCase(Target.Value)
   
        Case "hamu"
            Me.Cells(tRow, 22).Value = "[email=hafu@gruner.eu]hafu@gruner.eu[/email]"
        Case "cwi"
            Me.Cells(tRow, 22).Value = "[email=cwi@gruner.eu]cwi@gruner.eu[/email]"
        Case "casc"
            Me.Cells(tRow, 22).Value = "[email=casc@gruner.eu]casc@gruner.eu[/email]"
        Case "mass"
            Me.Cells(tRow, 22).Value = "[email=mass@gruner.eu]mass@gruner.eu[/email]"
        Case "unul"
            Me.Cells(tRow, 22).Value = "[email=unul@gruner.eu]unul@gruner.eu[/email]"
        Case "spt"
            Me.Cells(tRow, 22).Value = "[email=spt@gruner.eu]spt@gruner.eu[/email]"
   
    End Select
       
If Target.Count > 1 Then Exit Sub
If Target.Row > 2 Then
    If Target.Column = 13 Or Target.Column = 14 Then
        Select Case Target.Column
            Case 13
                Target.Offset(, 2) = WorksheetFunction.Sum(Target, Target.Offset(, 1))
            Case 14
                Target.Offset(, 1) = WorksheetFunction.Sum(Target, Target.Offset(, -1))
            Case Else
                'nix machen
        End Select
    End If
End If
End Sub
Top
#10
Moin,

zur Benutzung von Codetags: 5. Icon von rechts in der 2. Iconleiste
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top


Gehe zu:


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