Registriert seit: 19.10.2018
Version(en): 365
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
11.01.2019, 11:12
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2019, 11:12 von RPP63.)
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=128VBA 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.htmGruß 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)
Registriert seit: 11.04.2014
Version(en): Office 365
11.01.2019, 11:15
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2019, 11:15 von Klaus-Dieter.)
Hallo, bei mir funktioniert das: Tabelle1 | M | N | O | 3 | 10.10.2019 | 10 | 20.10.2019 | 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
Registriert seit: 10.01.2019
Version(en): 365
Sicher, das die Formatierung der Zellen auch "normal" ist? Aber denke das ist ja nur ein Ausschnitt von dem, was VBA macht, oder?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Mal eine kleines Rätsel … Was ist hier los? Hingegen (Direktfenster): 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)
Registriert seit: 19.10.2018
Version(en): 365
11.01.2019, 12:06
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2019, 12:15 von Remstal.
Bearbeitungsgrund: Codetags
)
......
Registriert seit: 19.10.2018
Version(en): 365
11.01.2019, 12:06
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2019, 12:18 von WillWissen.
Bearbeitungsgrund: Codetags
)
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Lösche mal beide Beiträge und stelle uns den Code vernünftig (Code-Tags und Einrückungen) vor. Oben bekomme ich Augenkrebs!
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)
Registriert seit: 19.10.2018
Version(en): 365
11.01.2019, 12:19
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2019, 12:20 von WillWissen.
Bearbeitungsgrund: Codetags
)
(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! 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
Registriert seit: 10.04.2014
Version(en): Microsoft 365, mtl. Kanal
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)
|