Zelle auswählen Datum ändert sich
Hallo,
Mit diesem Code lass ich mir das Datum in Zelle K2 anzeigen,
wenn ich in der Spalte A ein Zelle auswähle.
(A6:214 Step 4) In diesen Zellen stehen die Kalenderwochen.
Der Code ist darauf bedacht das ab der Zelle A6 die Kalenderwoche mit der KW 1 beginnt.
ich möchte aber das mir der Code in der Zelle K2 auch das Datum von der KW 52 oder KW 53 vom Vorjahr anzeigt.
Könnte mir einer von Euch helfen? Vielen Dank im voraus.
Mfg Tom
Mit diesem Code lass ich mir das Datum in Zelle K2 anzeigen,
wenn ich in der Spalte A ein Zelle auswähle.
(A6:214 Step 4) In diesen Zellen stehen die Kalenderwochen.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("A6:A214")) Is Nothing Then Exit Sub
If Target.Row Mod 2 = 0 Then _
Cells(2, 11) = CLng(CDate("20.12.2010")) + 7 * Target.Value
End Sub
Der Code ist darauf bedacht das ab der Zelle A6 die Kalenderwoche mit der KW 1 beginnt.
ich möchte aber das mir der Code in der Zelle K2 auch das Datum von der KW 52 oder KW 53 vom Vorjahr anzeigt.
Könnte mir einer von Euch helfen? Vielen Dank im voraus.
Mfg Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169956
Url: https://administrator.de/forum/zelle-auswaehlen-datum-aendert-sich-169956.html
Ausgedruckt am: 20.12.2024 um 05:12 Uhr
26 Kommentare
Neuester Kommentar
Hallo Tommylik!
Beginnend am letzten Montag im Dezember:
Beginnend am 1. Montag im Januar:
Wobei 'Year(Date) - 1' für das aktuelle Vorjahr steht
Gruß Dieter
Beginnend am letzten Montag im Dezember:
x = DateSerial(Year(Date) - 1, 1, 1) - Weekday(DateSerial(Year(Date) - 1, 1, 1) - 1, vbMonday) + (KW - 1) * 7
Beginnend am 1. Montag im Januar:
x = DateSerial(Year(Date) - 1, 1, 1 - Weekday(DateSerial(Year(Date) - 1, 1, 1) - 1, vbMonday)) + KW * 7
Gruß Dieter
Hallo Tom!
Na, anstelle von
Beide Beispiele sind gleich sicher. Es geht nur darum ob Deine 1. KW z.B. für das Jahr 2011 am Montag den 27.12.2010 oder aber am Montag den 03.01.2011 beginnen soll.
Und die Schaltjahre sind ebenfalls mit inbegriffen, da ja mit echten Datumswerten gerechnet wird.
Gruß Dieter
Na, anstelle von
x = ... |
Cells(2, 11) = ..... |
Beide Beispiele sind gleich sicher. Es geht nur darum ob Deine 1. KW z.B. für das Jahr 2011 am Montag den 27.12.2010 oder aber am Montag den 03.01.2011 beginnen soll.
Und die Schaltjahre sind ebenfalls mit inbegriffen, da ja mit echten Datumswerten gerechnet wird.
Gruß Dieter
Hallo Tom!
Sorry, zum einen muß natürlich anstelle von 'KW' 'Target.Value in der Codezeile stehen und zum anderen habe ich Dich wohl etwas mißverstanden, weil ich irgendwie davon ausging, das sich alle KW's auf das Vorjahr beziehen.
Ersetze die Codezeile 6 durch:
Und beginne im Tabellenblatt ab Zeile 6 = 0, Zeile 10 = 1, ..., Zeile 214 = 52
Gruß Dieter
Sorry, zum einen muß natürlich anstelle von 'KW' 'Target.Value in der Codezeile stehen und zum anderen habe ich Dich wohl etwas mißverstanden, weil ich irgendwie davon ausging, das sich alle KW's auf das Vorjahr beziehen.
Ersetze die Codezeile 6 durch:
Cells(2, 11) = DateSerial(Year(Date), 1, 1) - Weekday(DateSerial(Year(Date), 1, 1) - 1, vbMonday) + Target.Value * 7 |
Gruß Dieter
Hallo Tom!
Wobei dann KW 1 bis KW 53 verwendet wird
automatisiert die aktuelle Jahreszahl verwendet (nächstes Jahr 2012).
Wenn Du die Jahreszahl manuell in einer Zelle vorgeben möchtest, dann ersetze beide
z.B. durch Zelle K1
oder
Gruß Dieter
Ich kann in der Zelle A6 keine 0 eintragen da die KW's durch Formeln automatisch in den Zellen generiert werden.
Kein Problem, dann nehmen wir die andere Variante (KW-1):Cells(2, 11) = DateSerial(Year(Date), 1, 1) - Weekday(DateSerial(Year(Date), 1, 1) - 1, vbMonday) + (Target.Value - 1) * 7
Wobei dann KW 1 bis KW 53 verwendet wird
Aus irgendeinem Grund funktioniert es nur mit 2011.
Stimmt so nicht ganz. Es wird mitYear(Date) |
Wenn Du die Jahreszahl manuell in einer Zelle vorgeben möchtest, dann ersetze beide
Year(Date) |
Range("K1") |
Cells(1, 11) |
Gruß Dieter
Hallo Tom!
Habe doch geschrieben, dass In Zelle A6 die 1 und in Zelle A214 die 53 stehen muss.
Gruß Dieter
Habe doch geschrieben, dass In Zelle A6 die 1 und in Zelle A214 die 53 stehen muss.
Gruß Dieter
Hallo Tom!
OK, dann eben so:
Wobei für das Vorjahr (Zelle A6) alle Kalenderwochen (1-52) verfügbar sind/wären
Gruß Dieter
OK, dann eben so:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Or IsEmpty(Target) Then Exit Sub
If Not Intersect(Target, Range("A6:A214")) Is Nothing And Target.Row Mod 2 = 0 Then
If Target.Address = "$A$6" Then
Cells(2, 11) = GetDate(Year(Date) - 1, Target.Value) 'KW-Datum aktuelles Jahr - 1
Else
Cells(2, 11) = GetDate(Year(Date), Target.Value) 'KW-Datum aktuelles Jahr
End If
End If
End Sub
Private Function GetDate(ByVal Jahr As Integer, ByVal KW As Double) As Date
GetDate = DateSerial(Jahr, 1, 1) - Weekday(DateSerial(Jahr, 1, 1) - 1, vbMonday) + KW * 7
End Function
Gruß Dieter
Hallo Tom!
Der Code rechnet absolut korrekt!
War mir sicher, hab's aber extra nochmal von 1999 bis 2017 überprüft. In manchen Jahren geht's dann auch mal bis KW 53.
Das Jahr 2015 ist kein Schaltjahr. Schaltjahre sind durch 4 teilbar
Gruß Dieter
Der Code rechnet absolut korrekt!
War mir sicher, hab's aber extra nochmal von 1999 bis 2017 überprüft. In manchen Jahren geht's dann auch mal bis KW 53.
Das Jahr 2015 ist kein Schaltjahr. Schaltjahre sind durch 4 teilbar
Gruß Dieter
Hallo Tom!
Die Kalenderwochen auf dem Link, werden nach der 4-Tage-Januar-Regel gebildet. Das funktioniert dann mit dieser Variante:
Gruß Dieter
Die Kalenderwochen auf dem Link, werden nach der 4-Tage-Januar-Regel gebildet. Das funktioniert dann mit dieser Variante:
Private Function GetDate(ByVal Jahr As Integer, ByVal KW As Double) As Date
GetDate = DateSerial(Jahr, 1, 4) - (Weekday(DateSerial(Jahr, 1, 1), vbFriday) - 1) + (KW - 1) * 7
End Function
Gruß Dieter
Hallo Tom!
Nö, Deine Formeln habe ich keineswegs bedacht, da es völlig unerheblich ist, ob ich die Zahl manuell eingebe oder ob die Zahl ein Formelergebnis ist.
Deine Datei kann ich mir nicht ansehen, da ich noch eine ältere Version habe.
Meine Vermutung ist, dass Deine Formelergebnisse keine Ganzzahlen sind. Wenn die Zahlen Kommastellen haben, dann behalten die Zellen unabhängig von der Formatierung trotzdem ihren reellen Wert. Die Formatierung und Benutzereinstellungen beziehen sich nur auf die Anzeige.
Gruß Dieter
Nö, Deine Formeln habe ich keineswegs bedacht, da es völlig unerheblich ist, ob ich die Zahl manuell eingebe oder ob die Zahl ein Formelergebnis ist.
Deine Datei kann ich mir nicht ansehen, da ich noch eine ältere Version habe.
Meine Vermutung ist, dass Deine Formelergebnisse keine Ganzzahlen sind. Wenn die Zahlen Kommastellen haben, dann behalten die Zellen unabhängig von der Formatierung trotzdem ihren reellen Wert. Die Formatierung und Benutzereinstellungen beziehen sich nur auf die Anzeige.
Gruß Dieter
Hallo Tom!
Die Formel hättest Du auch etwas früher posten können!
Bisher bin ich davon ausgegangen, dass in Zelle A6 grundsätzlich das Datum für KW 1-53 aus dem Vorjahr zurückgegeben werden soll. Anhand Deiner Formel sehe ich erst jetzt, dass das erst ab der KW 51 passieren soll. Das hätte Dir aber anhand meiner Tabelle aber auffallen müssen.
In diesem Code wird für Zelle A6 geprüft, ob die Zahl größer 50 ist und dann erst ein Datum aus dem Vorjahr zurückgegeben.
Wobei die KW-Werte gleichfalls in Ganzzahlen umgewandelt werden (Kommastellen abschneiden)
Gruß Dieter
Die Formel hättest Du auch etwas früher posten können!
=WENN(UND(MONAT(code!A3)=1;A6>50);1;A6+1) |
Bisher bin ich davon ausgegangen, dass in Zelle A6 grundsätzlich das Datum für KW 1-53 aus dem Vorjahr zurückgegeben werden soll. Anhand Deiner Formel sehe ich erst jetzt, dass das erst ab der KW 51 passieren soll. Das hätte Dir aber anhand meiner Tabelle aber auffallen müssen.
In diesem Code wird für Zelle A6 geprüft, ob die Zahl größer 50 ist und dann erst ein Datum aus dem Vorjahr zurückgegeben.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Or IsEmpty(Target) Then Exit Sub
If Not Intersect(Target, Range("A6:A214")) Is Nothing And Target.Row Mod 2 = 0 Then
If Target.Address = "$A$6" And Int(Target.Value) > 50 Then
Cells(2, 11) = GetDate(Year(Date) - 1, Target.Value) 'Zelle A6 ab KW51 aktuelles Jahr - 1
Else
Cells(2, 11) = GetDate(Year(Date), Target.Value) 'KW-Datum aktuelles Jahr
End If
End If
End Sub
Private Function GetDate(ByVal Jahr As Integer, ByVal KW As Double) As Date
GetDate = DateSerial(Jahr, 1, 4) - (Weekday(DateSerial(Jahr, 1, 1), vbFriday) - 1) + (Int(KW) - 1) * 7
End Function
Gruß Dieter
Hallo Tom!
Worüber Du was in der Hilfe findest, wären die Begriffe hinter dem Punkt von Target. Jedoch nicht in der F1-Hilfe, sondern im VB-Editor-Ansicht-Objectkatalog bzw. aus Excel heraus mit Alt+F11-Taste und danach F2-Taste. Begriffe z.B. Row, Address, Intersect im Suchfeld eingeben und in der Spalte Klasse , die Klasse 'Range' mit Element 'Row' auswählen und dann auf das gelbe Fragezeichen klicken.
In der Variablen Target, wird das Range-Object (Zell-Object) übergeben und beinhaltet alle Elemente der selektierten Zelle z.B. :
.Row = Zeilennummer
.Column = Spaltennummer
.Formula = der Formeltext in englisch
.FormulaLocal = der Formeltext in deutsch
.Value = der Zellinhalt (Wert)
.Count = Anzahl der gleichzeitig selektierten Zellen (1 = eine Zelle, > 1 = mehrere Zellen
.Address = die absolute Zell-Adresse in Form $A$6
Intersect ist eine Funktion, die eine Schnittmenge bildet bzw. ermittelt, ob sich das Zell-Object innerhalb eines bestimmten Bereiches befindet.
Mod entspricht der Formelfunktion REST(...). Also dem, was bei einer Division hinter dem Komma steht z.B. 5:2 = Rest 1 | 6:2 = Rest 0 | 7:2 = Rest 1
Müsste eigentlich, wenn's ganz korrekt sein soll (Zeilennummer - 2) : 4 heißen, (6-2):4 = Rest 0, (10-2):4 = Rest 0....
IsEmpty entspricht der Formelfunktion ISTLEER(...) True/False
Die anderen Funktionen entsprechen folgenden Formelfunktionen:
Date = HEUTE()
DateSerial = DATUM(...)
Year = JAHR(...)
Weekday = WOCHENTAG(...)
Int = GANZZAHL(...)
Gruß Dieter
In meinem Excel 2010 finde ich keine Hilfe drüber. Wenn ich z.B Target markiere
und F1 drücke sagt mir Excel "Schlüsselwort wurde nicht gefunden".
Das wundert micht nicht, da Target lediglich ein Variable-Name ist, der z.B. auch 'MeineAusgewählteZelle' heißen könnte.und F1 drücke sagt mir Excel "Schlüsselwort wurde nicht gefunden".
Worüber Du was in der Hilfe findest, wären die Begriffe hinter dem Punkt von Target. Jedoch nicht in der F1-Hilfe, sondern im VB-Editor-Ansicht-Objectkatalog bzw. aus Excel heraus mit Alt+F11-Taste und danach F2-Taste. Begriffe z.B. Row, Address, Intersect im Suchfeld eingeben und in der Spalte Klasse , die Klasse 'Range' mit Element 'Row' auswählen und dann auf das gelbe Fragezeichen klicken.
In der Variablen Target, wird das Range-Object (Zell-Object) übergeben und beinhaltet alle Elemente der selektierten Zelle z.B. :
.Row = Zeilennummer
.Column = Spaltennummer
.Formula = der Formeltext in englisch
.FormulaLocal = der Formeltext in deutsch
.Value = der Zellinhalt (Wert)
.Count = Anzahl der gleichzeitig selektierten Zellen (1 = eine Zelle, > 1 = mehrere Zellen
.Address = die absolute Zell-Adresse in Form $A$6
Intersect ist eine Funktion, die eine Schnittmenge bildet bzw. ermittelt, ob sich das Zell-Object innerhalb eines bestimmten Bereiches befindet.
Mod entspricht der Formelfunktion REST(...). Also dem, was bei einer Division hinter dem Komma steht z.B. 5:2 = Rest 1 | 6:2 = Rest 0 | 7:2 = Rest 1
Müsste eigentlich, wenn's ganz korrekt sein soll (Zeilennummer - 2) : 4 heißen, (6-2):4 = Rest 0, (10-2):4 = Rest 0....
IsEmpty entspricht der Formelfunktion ISTLEER(...) True/False
Die anderen Funktionen entsprechen folgenden Formelfunktionen:
Date = HEUTE()
DateSerial = DATUM(...)
Year = JAHR(...)
Weekday = WOCHENTAG(...)
Int = GANZZAHL(...)
Gruß Dieter