Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1212to1216
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datum mit VBA manipulieren

Datum mit VBA manipulieren
braleta
Hallo Excel-ianer,
wie kann ich in einer Zelle eines Arbeitsblattes ein dort stehendes Datum mittels VBA ändern?
In einem Arbeitsblatt habe ich drei Zellen, die als Datum formatiert sind.
In die erste Zelle wird ein Rechnungs-Datum geschrieben, z.B. 01.05.2011
In der nächsten Zelle wird diesem Datum ein Betrag X (z.B. 7 Tage) als Bank-Eingang zugerechnet , das Datum lautet dann 08.05.2011.
In der dritten Zelle wird dem Wert der zweiten Zelle ein weiterer Wert von 7 Tagen zugerechnet, das ist das Bank-Ausgangsdatum und lautet damit 15.05.2011.
Fällt einer der beiden gerechneten Termine auf ein Wochenende, muss das Bank-Eingangsdatum auf den Freitag zurückgerechnet und das Bank-Ausgangsdatum auf den folgenden Montag hochgerechnet werden.
Dies mache ich mit den Anweisungen:
    Cells(15, 15) = ZahlungsEingang - 2 und
    Cells(15, 16) = ZahlungsAusgang + 1
Nur, der Casus knacktus ist, dass mir das einen Fehler generiert.
Ich habe jetzt die folgenden Werte in den drei Zellen:
01.05.2011 | 08.05.2011 | 15.05.2011    ...vorher
01.05.2011 | 8052009      | 15052012      ...nachher
Das heißt, dass VBA mir nur von der Jahreszahl "1" abzieht, aber nicht vom Datumswert.
Was mache ich falsch?
Danke
...braleta

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datum mit VBA manipulieren
04.05.2011 17:49:04
Hajo_Zi
wir sehen nicht wie Zahlungseingang definiert ist und auch nicht was da rauf geschrieben wird.
Bei Korekter Definition und korrekten Wert ist die Zeile ok.

AW: Datum mit VBA manipulieren
04.05.2011 18:10:41
braleta
Hajo,
danke für den Tipp, beschreiben ist nie so gut wie "anfassen".
Ich habe diese Datei hochgeladen: https://www.herber.de/bbs/user/74668.xlsm
und ich bin für jeden Tipp dankbar, ich weiß einfach nicht, was ich falsch mache...
braleta
AW: Datum mit VBA manipulieren
04.05.2011 18:11:18
braleta
Hajo,
danke für den Tipp, beschreiben ist nie so gut wie "anfassen".
Ich habe diese Datei hochgeladen: https://www.herber.de/bbs/user/74668.xlsm
und ich bin für jeden Tipp dankbar, ich weiß einfach nicht, was ich falsch mache...
braleta
Anzeige
AW: Datum mit VBA manipulieren
04.05.2011 18:17:11
Hajo_Zi
ich hätte es so gelöst. Option Explicit Sub test() Dim ZahlungsEingang As date Dim ZahlungsAusgang As Date ZahlungsEingang = Cells(9, 4) ZahlungsAusgang = Cells(9, 5) If Weekday(ZahlungsEingang, 2) = 7 Then Cells(9, 4) = ZahlungsEingang - 2 ElseIf Weekday(ZahlungsEingang, 2) = 6 Then Cells(9, 4) = ZahlungsEingang - 1 End If If Weekday(ZahlungsAusgang, 2) = 6 Then Cells(9, 5) = ZahlungsAusgang + 2 ElseIf Weekday(ZahlungsAusgang, 2) = 7 Then Cells(9, 5) = ZahlungsAusgang + 1 End If End Sub Gruß Hajo
das geht doch auch mit Formeln ...
04.05.2011 18:15:47
Matthias
Hallo
 ABCDE
1RechnungsdatumTag + X BankeingangTag + X BankausangTage X =7
2Sa. 07.05.2011Sa. 14.05.2011Sa. 21.05.2011  
3mit FormelFr. 13.05.2011Mo. 23.05.2011  

Formeln der Tabelle
ZelleFormel
B2=$A$2+$E$1
C2=$B$2+$E$1
B3=WENN(WOCHENTAG($A$2+$E$1;2)=6;$A$2+$E$1-1;WENN(WOCHENTAG($A$2+$E$1;2)=7;$A$2+$E$1-2;$A$2+$E$1))
C3=WENN(WOCHENTAG($B$2+$E$1;2)=6;$B$2+$E$1+2;WENN(WOCHENTAG($B$2+$E$1;2)=7;$B$2+$E$1+1;$B$2+$E$1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Userbild
Anzeige
AW: das geht doch auch mit Formeln ...
04.05.2011 18:47:16
braleta
Hajo,
danke, dieser Konstrukt gefällt mir, und klar, so geht es.
Danke!
Matthias,
danke fürden Tipp mit der Formel, aber bei sehr vielen Arbeitsblättern und innerhalb der einzelnen Arbeitsblätter mit vielen Instanzen ist VBA einfach schnellerund sicherer.
Aber: Danke
...braleta
dann benutz doch CDate ...
04.05.2011 19:30:19
Matthias
Hallo
    Dim ZahlungsEingang As String
Dim ZahlungsAusgang As String
ZahlungsEingang = CDate(Cells(9, 4))
ZahlungsAusgang = CDate(Cells(9, 5))
If Weekday(ZahlungsEingang) = vbSunday Then
Cells(10, 4) = CDate(ZahlungsEingang) - 2      'verschiebe Zahlungseingang von Sonntag  _
auf Freitag
End If
If Weekday(ZahlungsEingang) = vbSaturday Then
Cells(10, 4) = CDate(ZahlungsEingang) - 1       'verschiebe Zahlungseingang von Samstag  _
auf Freitag
End If
If Weekday(ZahlungsAusgang) = vbSaturday Then
Cells(10, 5) = CDate(ZahlungsAusgang) + 2       'verschiebe Zahlungsausgang von Samstag  _
auf Montag
End If
If Weekday(ZahlungsAusgang) = vbSunday Then
Cells(10, 5) = CDate(ZahlungsAusgang) + 1       'verschiebe Zahlungsausgang von Sonntag  _
auf Montag
End If


 BCDE
3  ZahlungszielVorlauf
4  147
5    
6Eingabe - > > >21.05.201128.05.201104.06.2011
7 Rechnungs-DatumZahlungs-EingangZahlungs-Ausgang
8 SoSaSa
9 Sa. 21.05.2011Sa. 28.05.2011Sa. 04.06.2011
10 ErgebnisFr. 27.05.2011Mo. 06.06.2011

Formeln der Tabelle
ZelleFormel
D6=RechnungsDatum+ZahlungsZiel-Vorlauf
E6=RechnungsDatum+ZahlungsZiel
D8=RechnungsDatum+ZahlungsZiel-Vorlauf
E8=RechnungsDatum+ZahlungsZiel
C9=C6
D9=RechnungsDatum+ZahlungsZiel-Vorlauf
E9=RechnungsDatum+ZahlungsZiel


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Userbild
Anzeige
noch mal mit Formeln
04.05.2011 18:48:13
Erich
Hi,
so ginge es wohl auch:
 CDE
3 ZahlungszielVorlauf
4 147
5   
6So  01.05.11So  08.05.11So  15.05.11
7Rechnungs-DatumZahlungs-EingangZahlungs-Ausgang
8SoFrMo
9So  01.05.11Fr  06.05.11Mo  16.05.11

Formeln der Tabelle
ZelleFormel
D6=RechnungsDatum+ZahlungsZiel-Vorlauf
E6=RechnungsDatum+ZahlungsZiel
C8=C9
D8=D9
E8=E9
D9=RechnungsDatum+ZahlungsZiel-Vorlauf-MAX(;REST(RechnungsDatum+ZahlungsZiel-Vorlauf-2;7)-4)
E9=RechnungsDatum+ZahlungsZiel+MAX(;2-REST(RechnungsDatum+ZahlungsZiel;7))

Und hier die Umrechnungen von SaSo auf Fr bzw. Mo:
 ABC
1QuelldatumSaSo auf FrSaSo auf Mo
2Do  05.05.11Do  05.05.11Do  05.05.11
3Fr  06.05.11Fr  06.05.11Fr  06.05.11
4Sa  07.05.11Fr  06.05.11Mo  09.05.11
5So  08.05.11Fr  06.05.11Mo  09.05.11
6Mo  09.05.11Mo  09.05.11Mo  09.05.11
7Di  10.05.11Di  10.05.11Di  10.05.11
8Mi  11.05.11Mi  11.05.11Mi  11.05.11
9Do  12.05.11Do  12.05.11Do  12.05.11
10Fr  13.05.11Fr  13.05.11Fr  13.05.11
11Sa  14.05.11Fr  13.05.11Mo  16.05.11

Formeln der Tabelle
ZelleFormel
B2=A2-MAX(;REST(A2-2;7)-4)
C2=A2+MAX(;2-REST(A2;7))

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
mit Formeln oder VBA
05.05.2011 08:18:14
Erich
Hi Bruno,
schau dir doch mal diese Mappe an. Da gibt es eine VBA-freie Formellösung, eine Lösung ohne Formeln und eine Mischform:
https://www.herber.de/bbs/user/74669.xlsm
In deiner Mappe gibt es möglicherweise ein kleines Problem:
In D9:E9 stehen zunächst zwei Formeln, bei denen noch Wochenenden als Ergebnisse vorkommen können.
Wenn du dann dein Makro startest, werden diese Formeln durch Werte ersetzt. Die Formeln sind verschwunden.
Und die Werte sind falsch, sobald du in C9 ein neues Rechnungs-Datum eingegeben hast.
Mischungen zwischen Formeln und VBA können ihre Tücken haben...
@Matthias:
Meinst du deinen Vorschlag mit CDate wirklich ernst? In D9 steht ein Datum.
Dim ZahlungsEingang As String ' ist also immer String.
CDate(Cells(9, 4)) ' wandelt das Datum in D9 überflüssigerweise in ein Datum um.
ZahlungsEingang = CDate(Cells(9, 4)) ' macht aus diesem Datum einen String.
Weekday(ZahlungsEingang) ' wandelt ZahlungsEingang in ein Datum, um Weekday berechnen zu können.
Hier könnte auch stehen: Weekday(CDate(ZahlungsEingang)).
CDate(ZahlungsEingang) - 2 ' wandelt ZahlungsEingang in ein Datum, um 2 abziehen zu können.
Und das alles nur, um ZahlungsEingang nicht als Date zu deklarieren, was ganz sicher passend wäre?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
@Erich wo Du Recht hast, ... ;o) kwT
05.05.2011 16:20:24
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige