Datum errechnen

  • #1
M

Mischi89

Guest
hi, ich habe rund 50 tabellen und in jeder in den Zellen A5,A9,A13,A17,A21,A25 und A29 die Wochentage von oben nach unten als TT.MM.YYYY stehen. gibt es eine formel die mir die daten für die nächsten wochen ausrechnen kann? ich habe probiert von Montag 08.05.2006 (in zahlen: 38845) die nächsten 2 Tage (A9 und A13) zu errechnen bloss ich bin etwas ratlos was excel angeht ;) und erst recht mit den funktionen! ich habe dies probiert:

=WENN(A5=38845;(A9=38845+1;A13=38845+2);(A9=38845+1;A13=38845+2))

geht aba irgendwie net... wär nett wenn es auf beide fragen antworten gäbe ;)

1. allgemeine formel für die daten?
2. meine kuhle rechnung xD
 
  • #2
hm hab die 38xxx durch A5 ersetzt und ging auch net ===> =WENN(A5=38845;(A9=A5+1;A13=A5+2);(A9=A5+1;A13=A5+2))
 
  • #3
Irgendwie verstehe ich nicht so recht was Du machen möchtest :?

A5 = Erste datum der Woche z.B. 08.05.2006

A9 = A5+1

A13 = A5+2

usw.
 
  • #4
hm naja ich will nich alle 56 Tabellen durchgehen und dort immerwieder das Datum umtippen... ich hab halt hiermit gefragt ob ich in ein paar schritten bei allen 56 wochen (/tabellen) das Datum errechnen kann
 
  • #5
Wenn ich dich jetzt richtig verstehe, sind die TAbellen schon komplett mit Daten vorhanden.
Dann wird dir sicherlich nur die Programmierung weiterhelfen.

Soetwas macht eigentlich auch vorher.

Wenn keine daten vorhanden.

Erste Tabelle alles wie in Antwort2 erstellen, alles markieren kopieren und anschließend in jede Tabelle gehen und einfügen,

BEi A5 in Tabelle zwei könntest Du dich zb. dann gleich noch auf Tabelle1 beziehen, sonst müsstest Du immer dass erste datum jeder Tabelle manuell ändern.

Vllt kommt ja noch die entscheidende Antwort für dich. :-\
 
  • #6
schau schrieb:
BEi A5 in Tabelle zwei könntest Du dich zb. dann gleich noch auf Tabelle1 beziehen, sonst müsstest Du immer dass erste datum jeder Tabelle manuell ändern.

versteh ich net... hab in tabelle 1 bei a5 jetz 08.05.2006 stehn... bei den anderen (a9,a13,a17,a21,a25,a29) habe ich immer =a5+1/2/...

in tabelle 2 hab ich bei a5: =Tabelle1!A5+7

in tabelle 3 müsste ich das dann trotzdem in =Tabelle2!A5+7 umändern damit es dann bei den anderen tagen funzen soll

die ganze sache is mir noch zuuu manuell :|
 
  • #7
Hallo Mischi89,

ich hab dir mal eine Makro für dein Datum-Schreiben zusammengestellt.

Wichtige Voraussetzung dafür ist ein gleichmäßiger Tabellenname mit fortlaufender Nummer, Also z.B Tabelle1, Tabelle2, Tabelle3 oder auch kW23, kW24, kW25...

Auf dem 1.Tabellenblatt muß das Datum des ersten Tages ausgefüllt sein (also A5). Den Rest macht dann das Makro in 1 sec  ;D
(mit einem Pentium II vielleicht auch 2  sec )
Zur Sicherheit werden die Zelle vor dem Ausfüllen auch formatiert.(dd.mm.yyyy)

Gruß Matjes :)
Code:
Sub DatumEinfuegenA5A9A13A17A21A25A29()

'In->Tabelle1' muß A5 als Datum formatiert und ausgefüllt sein
'Alle weiteren Tabellen, deren Tabellenname mit Tabelle anfängt,
'werden dann automatisch ausgefüllt.
'Aus der Nummer im Tabellennamen wird die Distanz in Wochen zu
'dem Datum in->Tabelle1' errechnet,
'z.B. Tabelle1 zu Tabelle5 entspricht 28Tage.
'Die Tabellennamen müssen daher lückenlos aufsteigend nummeriert sein.


 -><<< A N P A S E N >>>
  Const c_TAB_NAME_WURZEL = Tabelle
  Const c_ANFANG_MIT_TABNR = 1
 -><<< A N P A S E N    E N D E >>>
  Const c_FORMAT_DATUM = dd.mm.yyyy
  
 ->Range der Tage
  Const c_TAG1 = A5
  Const c_TAG2 = A9
  Const c_TAG3 = A13
  Const c_TAG4 = A17
  Const c_TAG5 = A21
  Const c_TAG6 = A25
  Const c_TAG7 = A29
  
  Dim wb As Workbook, ws As Worksheet
  Dim TabName As String, dAnfDatum As Date
  Dim Tabnr As Long, dDatum As Date
  
 ->aktive Mappe setzen
  Set wb = ActiveWorkbook
  
 ->Tabellenname für Anfangsdatum
  TabName = c_TAB_NAME_WURZEL & c_ANFANG_MIT_TABNR
  On Error Resume Next
  Set ws = wb.Worksheets(TabName)
  If Err.Number <> 0 Then Err.Clear
  If ws Is Nothing Then
    MsgBox Anfangsblatt  & TabName &  nicht vorhanden.
    GoTo AUFRAEUMEN
  End If
  
 ->Anfangsdatum prüfen
  If Not IsDate(ws.Range(c_TAG1)) Then
    MsgBox c_TAG1 &  auf dem Anfangsblatt  & TabName &  enthält kein Datum.
    GoTo AUFRAEUMEN
  End If
  
 ->Anfangsdatum holen
  dAnfDatum = ws.Range(c_TAG1)
  
 ->Datum auf Anfangsblatt setzen
  ws.Range(c_TAG1).NumberFormat = c_FORMAT_DATUM
  ws.Range(c_TAG1).Value = dAnfDatum
  ws.Range(c_TAG2).NumberFormat = c_FORMAT_DATUM
  ws.Range(c_TAG2).Value = dAnfDatum + 1
  ws.Range(c_TAG3).NumberFormat = c_FORMAT_DATUM
  ws.Range(c_TAG3).Value = dAnfDatum + 2
  ws.Range(c_TAG4).NumberFormat = c_FORMAT_DATUM
  ws.Range(c_TAG4).Value = dAnfDatum + 3
  ws.Range(c_TAG5).NumberFormat = c_FORMAT_DATUM
  ws.Range(c_TAG5).Value = dAnfDatum + 4
  ws.Range(c_TAG6).NumberFormat = c_FORMAT_DATUM
  ws.Range(c_TAG6).Value = dAnfDatum + 5
  ws.Range(c_TAG7).NumberFormat = c_FORMAT_DATUM
  ws.Range(c_TAG7).Value = dAnfDatum + 6
  
  Tabnr = c_ANFANG_MIT_TABNR
  
  Do
   ->nächster Tabellenname
    Tabnr = Tabnr + 1
    TabName = c_TAB_NAME_WURZEL & Tabnr
    
   ->Tabellenblatt sezen
    On Error Resume Next
    Set ws = wb.Worksheets(TabName)
    If Err.Number <> 0 Then
      Err.Clear
      MsgBox _
        Blatt  & TabName &  nicht gefunden. & vbLf & _
        Makro beendet.
      GoTo AUFRAEUMEN
    End If
    
   ->Anfangsdatum des Blattes bestimmen
    dDatum = dAnfDatum + 7 * (Tabnr - c_ANFANG_MIT_TABNR)
    
   ->Datum auf Anfangsblatt setzen
    ws.Range(c_TAG1).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG1).Value = dDatum
    ws.Range(c_TAG2).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG2).Value = dDatum + 1
    ws.Range(c_TAG3).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG3).Value = dDatum + 2
    ws.Range(c_TAG4).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG4).Value = dDatum + 3
    ws.Range(c_TAG5).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG5).Value = dDatum + 4
    ws.Range(c_TAG6).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG6).Value = dDatum + 5
    ws.Range(c_TAG7).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG7).Value = dDatum + 6

  Loop
AUFRAEUMEN:
  Set wb = Nothing: Set ws = Nothing
End Sub
 

Gruß Matjes :)
 
  • #8
puhhhh danke ^^ ich versuchs gleich mal...
 
  • #9
kann ich das da jetz einfach kopieren und dann geh ich in VBA in tabelle 1 und füge das sein?
 
  • #11
ich bins nochma ^^

hab in allen tabellen in A2 noch immer stehen: 8.5.-14.5. halt die daten der jeweiligen woche... kann man das da noch irgendwie einbauen, dass es das auch automatisch verändert?
 
  • #12
Kann man  ;D

Code:
Sub DatumEinfuegenA5A9A13A17A21A25A29_plusA2()

'In->Tabelle1' muß A5 als Datum formatiert und ausgefüllt sein
'Alle weiteren Tabellen, deren Tabellenname mit Tabelle anfängt,
'werden dann automatisch ausgefüllt.
'Aus der Nummer im Tabellennamen wird die Distanz in Wochen zu
'dem Datum in->Tabelle1' errechnet,
'z.B. Tabelle1 zu Tabelle5 entspricht 28Tage.
'Die Tabellennamen müssen daher lückenlos aufsteigend nummeriert sein.


 -><<< A N P A S E N >>>
  Const c_TAB_NAME_WURZEL = Tabelle
  Const c_ANFANG_MIT_TABNR = 1
 -><<< A N P A S E N    E N D E >>>
  Const c_FORMAT_DATUM = dd.mm.yyyy
  Const c_FORMAT_VONBIS = d.m.
  
 ->Range der Tage
  Const c_TAG1 = A5
  Const c_TAG2 = A9
  Const c_TAG3 = A13
  Const c_TAG4 = A17
  Const c_TAG5 = A21
  Const c_TAG6 = A25
  Const c_TAG7 = A29
  
  Const c_TAGVONBIS = A2
  
  Dim wb As Workbook, ws As Worksheet
  Dim TabName As String, dAnfDatum As Date
  Dim Tabnr As Long, dDatum As Date
  
 ->aktive Mappe setzen
  Set wb = ActiveWorkbook
  
 ->Tabellenname für Anfangsdatum
  TabName = c_TAB_NAME_WURZEL & c_ANFANG_MIT_TABNR
  On Error Resume Next
  Set ws = wb.Worksheets(TabName)
  If Err.Number <> 0 Then Err.Clear
  If ws Is Nothing Then
    MsgBox Anfangsblatt  & TabName &  nicht vorhanden.
    GoTo AUFRAEUMEN
  End If
  
 ->Anfangsdatum prüfen
  If Not IsDate(ws.Range(c_TAG1).Value) Then
    MsgBox c_TAG1 &  auf dem Anfangsblatt  & TabName &  enthält kein Datum.
    GoTo AUFRAEUMEN
  End If
  
 ->Anfangsdatum holen
  dAnfDatum = ws.Range(c_TAG1)
  
  Tabnr = c_ANFANG_MIT_TABNR - 1
  
  Do
   ->nächster Tabellenname
    Tabnr = Tabnr + 1
    TabName = c_TAB_NAME_WURZEL & Tabnr
    
   ->Tabellenblatt sezen
    On Error Resume Next
    Set ws = wb.Worksheets(TabName)
    If Err.Number <> 0 Then
      Err.Clear
      MsgBox _
        Blatt  & TabName &  nicht gefunden. & vbLf & _
        Makro beendet.
      GoTo AUFRAEUMEN
    End If
    
   ->Anfangsdatum des Blattes bestimmen
    dDatum = dAnfDatum + 7 * (Tabnr - c_ANFANG_MIT_TABNR)
    
   ->Datum auf Anfangsblatt setzen
    ws.Range(c_TAG1).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG1).Value = dDatum
    ws.Range(c_TAG2).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG2).Value = dDatum + 1
    ws.Range(c_TAG3).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG3).Value = dDatum + 2
    ws.Range(c_TAG4).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG4).Value = dDatum + 3
    ws.Range(c_TAG5).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG5).Value = dDatum + 4
    ws.Range(c_TAG6).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG6).Value = dDatum + 5
    ws.Range(c_TAG7).NumberFormat = c_FORMAT_DATUM
    ws.Range(c_TAG7).Value = dDatum + 6

   ->Von - Bis in A2 (als Text)
    ws.Range(c_TAGVONBIS).NumberFormat = @
    ws.Range(c_TAGVONBIS).Value = _
      Format(dDatum, c_FORMAT_VONBIS) & - & Format(dDatum + 6, c_FORMAT_VONBIS)
  Loop
AUFRAEUMEN:
  Set wb = Nothing: Set ws = Nothing
End Sub

Gruß Matjes :)
 
  • #13
danke für die mühe aber ich muss leider sagen: es klappt net ^^ ich tipp zB 2.3.-8.3. ein und in den anderen tabellen ändert sich nix :>
 
  • #14
Hast Du den vorherigen Makro komplett gegen
Sub DatumEinfuegenA5A9A13A17A21A25A29_plusA2()
ausgetauscht und dann diesen Makro nochmal von Tabelle1 an das Datum ausfüllen lassen ?

Gruß Matjes :)
 
  • #15
ja hab den alten überschrieben, bloss jetz will ich den alten wieder reinmachen und es geht gar net mehr

edit: habs mit dem 1. wieder hinbekommen, bloss mit deinem matjes funzt das net so wenn ich bei a2 in tabelle1 27.11.-3.12. eingeb wird das bei den anderen tabellen net geändert... bzw wenn ich bei montag das datum änder, dass automatisch auch die daten der woche sich ändern (beispiel diese woche: 8.5.-14.5. => montag is der 8., ich tipp ein dass montag der 10 is und da müsste es ja von 10.5.-16.5. gehen) ;)

danke erstmal für eure großartige hilfe O0
 
  • #16
Hallo Mischi89,

eigentlich solltest Du garnichts in A2 eingeben. Das sollte der Makro erledigen.

Vorgabe für das Makro als Anfangsdatum ist in Tabelle1 in Zelle A5 !!

Dann sollten bei der 2.Variante
a) A5,A9,A13,A17,A21,A25,A29 mit Daum dd.mm.yyyy
b) A2 mit Datum von A5 und A29 im Format d.m.-d.m.
vom Makro auf allen Blättern ausgefüllt werden.

Wenn Du mir deine Mail-Adresse an mein mailaddy schickst,
könnte ich dir eine Beispiel-Datei schicken.

Gruß Matjes :)
 
  • #17
jo, also ich hab alle a2 freigelassen jetz! wenn ich das makro benutzen will muss ich dann auf extras => makro => markieren => ausführen klicken? oder einfach in VBA rein in tabelle1 kopieren und das reicht?


EDIT: wenn ich ausführen mach kommt: Blatt Tabelle58 nicht gefunden. Makro beendet.

das kam aber schon als ich noch keine tabelle 56 hatte, da hab ich die gemacht und dasselbe auch mit tabelle57...


EDIT2: vor lauter aufregung über diese meldung hab ich ganz übersehen: es klappt mit den wochen ;)

aber das hat komplikationen mit meinen funktionen, die ich gemacht hab, dass wenn ich bei montag das datum änder sich bei allen 56 tabellen das datum bei den tagen ändert

FINALEDIT: LOL sry klappt natürlich doch alles ^^ muss makro immerwieder neu ausführen... net gewusst =) ich muss ne rießentabelle erstellen obwohl ich voll der excel-noob bin also ich hoffe ihr versteht meine unwissenheit :| hatte nur 1 jahr info und da mal nebenbei excel gehabt :p
 
  • #18
Hallo Mischi89,

in der Ende-Meldung wird jetzt ausgegeben, welche Blätter bearbeitet wurden. Code ist auch noch etwas optimiert.

Gruß Matjes :)
Code:
Sub DatumEinfuegenA5A9A13A17A21A25A29_plusA2()

'In->Tabelle1' muß A5 als Datum formatiert und ausgefüllt sein
'Alle weiteren Tabellen, deren Tabellenname mit Tabelle anfängt,
'werden dann automatisch ausgefüllt.
'Aus der Nummer im Tabellennamen wird die Distanz in Wochen zu
'dem Datum in->Tabelle1' errechnet,
'z.B. Tabelle1 zu Tabelle5 entspricht 28Tage.
'Die Tabellennamen müssen daher lückenlos aufsteigend nummeriert sein.


 -><<< A N P A S E N >>>
  Const c_TAB_NAME_WURZEL = Tabelle
  Const c_ANFANG_MIT_TABNR = 1
 -><<< A N P A S E N    E N D E >>>
  Const c_FORMAT_DATUM = dd.mm.yyyy
  Const c_FORMAT_VONBIS = d.m.
  
 ->Range der Tage
  Dim RangeDer7Tage As Variant
  RangeDer7Tage = Array(A5, A9, A13, A17, A21, A25, A29)
  Const c_TAGVONBIS = A2
  
  Dim wb As Workbook, ws As Worksheet
  Dim TabName As String, dAnfDatum As Date
  Dim Tabnr As Long, dDatum As Date, y As Long
  
  
 ->aktive Mappe setzen
  Set wb = ActiveWorkbook
  
 ->Tabellenname für Anfangsdatum
  TabName = c_TAB_NAME_WURZEL & c_ANFANG_MIT_TABNR
  On Error Resume Next
  Set ws = wb.Worksheets(TabName)
  If Err.Number <> 0 Then Err.Clear
  If ws Is Nothing Then
    MsgBox Anfangsblatt  & TabName &  nicht vorhanden.
    GoTo AUFRAEUMEN
  End If
  
 ->Anfangsdatum prüfen
  If Not IsDate(ws.Range(RangeDer7Tage(0)).Value) Then
    MsgBox RangeDer7Tage(0) &  auf dem Anfangsblatt  & TabName &  enthält kein Datum.
    GoTo AUFRAEUMEN
  End If
  
 ->Anfangsdatum holen
  dAnfDatum = ws.Range(RangeDer7Tage(0))
  
  Tabnr = c_ANFANG_MIT_TABNR - 1
  
  Do
   ->nächster Tabellenname
    Tabnr = Tabnr + 1
    TabName = c_TAB_NAME_WURZEL & Tabnr
    
   ->Tabellenblatt sezen
    On Error Resume Next
    Set ws = wb.Worksheets(TabName)
    If Err.Number <> 0 Then
      Err.Clear
      MsgBox _
        Ende, weil Blatt  & TabName &  nicht gefunden. & vbLf & _
        Bearbeitet wurden die Blätter  & _
        c_TAB_NAME_WURZEL &   & c_ANFANG_MIT_TABNR & - & (Tabnr - 1)
      GoTo AUFRAEUMEN
    End If
    
   ->Anfangsdatum des Blattes bestimmen
    dDatum = dAnfDatum + 7 * (Tabnr - c_ANFANG_MIT_TABNR)
    
   ->Datum formatieren und eintragen
    For y = 0 To 6
      With ws.Range(RangeDer7Tage(y))
        .NumberFormat = c_FORMAT_DATUM
        .Value = dDatum + y
      End With
    Next

   ->Von - Bis in A2 (als Text)
    With ws.Range(c_TAGVONBIS)
      .NumberFormat = @
      .Value = Format(dDatum, c_FORMAT_VONBIS) & - & Format(dDatum + 6, c_FORMAT_VONBIS)
    End With
  Loop
AUFRAEUMEN:
  Set wb = Nothing: Set ws = Nothing
End Sub
 
  • #19
ach danke ::) klappt alles
 
  • #20
nur mal nebenbei: wie kann man das mit funktionen machen?

also in A2 soll d.m.-d.m. stehen, das erste d.m. is A5 und das andere A25 (wobei die beiden in dd.mm.yyyy angegeben sind!
 
Thema:

Datum errechnen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.493
Neuestes Mitglied
Flensburg45
Oben