Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
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
VBA Anzahl der Tage im Monat ermitteln lassen
06.03.2016 13:59:20
André
Hallo die Fachwelt!
am Ende des aktuellen oder am Anfang des Folgemonats rechne ich meine Kundentermine ab.
Ein Makro, das ich aus mehreren Userforen assembliert habe fragt mich nach dem ersten Tag des Abrechnungsmonats. In die Userbox geb ich das komplette Datum (z.B. 01.03.2016) ein. Daraus errechnet das Makro 31 Tage und löscht alle übrigen Zeilen.
Bei kürzeren Monaten muss ich die unzutreffenden Tage manuell entfernen.
Gern möchte ich die 2 Sachen einbinden:
Die korrekte Anzahl der Tage im Monat selbst ermitteln lassen.
Dazu fand ich eine Anweisung, die ich selbst nicht einbinden kann :(
Der letzte Tag des aktuellen Monats:
VBA
DateSerial(Year(Date()), Month(Date()) + 1, 0)

Mit diesem Wert dann die Monate davor u. danach entfernen lassen. Die Abrechnung schreibe ich monatsweise mal in der letzten Woche des aktuellen Monats mal in den ersten Wochen des Folgemonats.
1) wie bekomme ich den aktuellen kompletten Monat mit der korrekten Anzahl der Tage extrahiert wenn das Makro in der letzten Monatswoche (am letzten Arbeitstag) läuft?
2) wie bekomme ich den letzten Monat extrahiert, wenn das Makro in den ersten 3 Monatswochen des Folgemonats, für den letzten Monat, ausgeführt wird.

Die Tabellenstruktur sieht wie folgt aus:

Kundenname |Stunden |Beginn
KundeA |2 |01.02.2016 13:15
KundeB |2 |18.02.2016 13:15
KundeA |2 |01.03.2016 13:15
KundeB |2 |18.03.2016 13:15
KundeA |2 |01.04.2016 13:15
KundeB |2 |18.04.2016 13:15
/Der Codeanfang***
Sub Stundenabrechnung()
Dim Beginn As Date
Dim anfangsdatum As Date
Dim datumsuche As Date
Dim lastrow As Long
Dim zaehler As Long
Beginn = Date
anfangsdatum = InputBox("Anfangsdatum?")
'datumsuche = Beginn - anfangsdatum
datumsuche = anfangsdatum - 1
MsgBox datumsuche, , "Ausgabe aller Daten NACH folgendem Datum"
lastrow = Cells.SpecialCells(xlCellTypeLastCell).Row
For zaehler = lastrow To 1 Step -1
If IsDate(Cells(zaehler, 1)) Then
If CDate(Cells(zaehler, 1)) If CDate(Cells(zaehler, 1)) > CDate(datumsuche) + 31 Then Rows(zaehler).Delete
End If
Next
/ Code Ende***
Danke schön!
André

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Anzahl der Tage im Monat ermitteln lassen
06.03.2016 16:04:13
Michael
Hi André,
schreib mal verschiedene Datümer in A1 und probier das aus:
Sub monate()
Dim datum As Date, letzter As Date
datum = Range("A1")
letzter = WorksheetFunction.EoMonth(datum, 0)
If datum 
Schöne Grüße,
Michael

AW: VBA Anzahl der Tage im Monat ermitteln lassen
06.03.2016 16:45:03
André
Hallo Michael,
danke für deinen Lösungsvorschlag!
Dein Makro gibt mir den ersten in der Tabelle aufgeführten Monat heraus.
In meinem Post habe ich zunächst nicht angefügt, dass der Zeitraum derzeit 26.02.2014-31.06.2016 umfasst und um weitere Termine nach vorne ständig erweitert wird.
Hier die Tabelle als Link.
https://www.herber.de/bbs/user/104146.xlsx
Für die Abrechnung benötige den/das aktuelle/n Monat/Jahr.
Führe ich dein Makro aus, bekomme ich diese Meldung raus:
Aus dem Datum 26.02.2014 errechnet sich:
Der erste ist 01.02.2006 und der letzte ist 27.02.2006
/ das eigentliche Jahr gibt es also auch nicht aus
Nochmals, danke schön
André

Anzeige
komisches Datum....
06.03.2016 17:57:56
Michael
Hi André,
ich weiß ja nicht, was Du in A1 stehen hast, aber bei mir kommt das Richtige raus:
Userbild
Wenn Du im Makro schreibst : datum = Date
kommt der 1.3. und 31.3. raus.
Schöne Grüße,
Michael

AW: komisches Datum....
06.03.2016 18:21:11
André
Bitte, wenn möglich, lies dir nochmal mein letztes Posting durch.
Mir geht's nicht um 2014, wie in deinem Screenshot angezeigt sondern um 2016.
In A1 habe ich die Überschrift 'Beginn', deswegen habe ich dein Makro auf A2 angepasst. (Lass ich A1 habe ich einen VBA-Laufzeitfehler 13)
Mit datum = Range("A2") kommt trotzdem das gleiche Ergebnis wie bei dir heraus, siehe Screenshot.
https://www.herber.de/bbs/user/104148.jpg
Wie würde der aktuelle Monat/Jahr dazu führen, dass die überflüssigen Monate gelöscht würden?
danke
André

Anzeige
AW: komisches Datum....
06.03.2016 19:08:12
Michael
Hi André,
also, ganz langsam: ich zitiere:
Aus dem Datum 26.02.2014 errechnet sich:
Der erste ist 01.02.2006 und der letzte ist 27.02.2006

Das ist eben NICHT der Fall.
Abgesehen davon: ich habe Dir keinen fertigen Schnipsel für Deinen Beispielcode fabriziert, sondern nur ein lauffähiges Beispiel um zu zeigen, wie die Geschichte funktioniert.
Du wolltest a) wissen, was die Grenzen des laufenden bzw. vorhergehenden Monats sind, und die zeigt die MsgBox an.
Es ist sicher keine große Geschichte, das in Deinen Code zu integrieren, aber bitte mit Beispieldate, nicht mit Grafiken.
Schöne Grüße,
Michael

Anzeige
AW: komisches Datum....
06.03.2016 20:12:07
André
Sorry, du hast recht, bei den ersten Versuchen habe ich dein Makro auf eine andere Datei angewandt, und schrieb irrtümlich von diesem falschen Screenshot ab...
Dein Makro zeigt also korrekter Weise den ersten Monat in der Liste an.
Die Lösung, nach der ich suche setzt sich aus zwei Sachen zusammen:
- wenn in der letzten Woche des aktuellen Monats ausgeführt, d.h. würde ich den Februar 2016 zw. 22.02.2016-29.02.2016 abrechnen, möchte ich den aktuellen Monat, also den Februar extrahieren lassen;
- Erstelle ich die Abrechnung nicht in der letzten Woche des Monats sondern in den ersten 3-4 Wochen des Folgemonats bei März also 31 Tage - 7 Tage (zw. 01.03.2016-24.03.2016), sollte der abgelaufene Monat Februar 2016 extrahiert werden.
Gern würde ich einen "fast fertigen" Code vorlegen wollen, meine VBA-Kenntnisse sind echt unterirdisch und reichen leider nicht, um deinen Code richtig zu interpretieren. :(
Mit meinen Versuchen würde ich wohl noch mehr irritieren...
Es wäre also echt etwas großes, wenn du bittemeinen bisherigen Code um deine Lösung ergänzen könntest.
Die Tabelle mit beiden Makros meinem und deinem füge ich anbei.
https://www.herber.de/bbs/user/104150.xlsm
Denke schön, und sorry für das Missverständnis.
André

Anzeige
Vorschlag
07.03.2016 19:45:50
Michael
Hi André,
ich kann Deinen Code nicht recht nachvollziehen - Du löschst ja "nur" Zeilen.
Ich habe den Gaul jetzt andersrum aufgezäumt: die zur Eingabe passenden Daten werden ins Blatt "Auswertung" kopiert.
Deine Daten stammen offensichtlich aus irgendeinem Import, denn in Spalte A befindet sich kein Datum als "Datum", sondern als "Text", das macht aber nix: ich suche in Spalte A nach dem ersten Auftreten des Monats und nach dem letzten, und alles zwischendrin wird kopiert.
Der Code
Option Explicit
Sub auswertung()
Dim c As Range
Dim von As Long, bis As Long ' Zeilen
Dim Tvon As Long, Tbis As Long ' Zeilen mit Treffern
Dim suchen As String
Dim shD As Worksheet
von = 2
Set shD = Sheets("Daten")
bis = shD.Range("A" & shD.Rows.Count).End(xlUp).Row
suchen = Range("B4").Text
Set c = shD.Range("A" & von & ":A" & bis).Find(what:=suchen, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
Tvon = c.Row
Set c = shD.Range("A" & von & ":A" & bis).FindPrevious(c)
If Not c Is Nothing Then Tbis = c.Row
End If
If Tvon > 0 And Tbis > 0 Then
bis = Range("A" & Rows.Count).End(xlUp).Row
If bis > 7 Then Range("A8:C" & bis).ClearContents
shD.Range("A" & Tvon & ":C" & Tbis).Copy Range("A8")
Else
MsgBox "Monat " & suchen & " nicht gefunden."
End If
End Sub
Sub monate()
Dim letzter As Date, datum As Date
Const tageAbziehen = 7
If IsDate(Range("B2")) Then datum = Range("B2") Else datum = Date
letzter = WorksheetFunction.EoMonth(datum, 0)
If datum 

enthält zu Beginn der sub monate die Konstante Tageabziehen; falls Du einen Tag mehr oder weniger haben willst, kannst Du das hier ändern.
Die Datei: https://www.herber.de/bbs/user/104171.xlsm
Schöne Grüße,
Michael

Anzeige
AW: Vorschlag
07.03.2016 22:02:48
André
Hallo Michael,
du hast mein Problem gelöst! Vielen Dank!!!
Ja, völlig richtig, diese Daten hole ich mit Copy/Paste aus dem Outlook. ich habe keine Adminrechte im Netzwerk so kann ich nicht per Schnittstelle darauf zugreifen.
Als erstes bereinige ich sie von weiteren Kommentaren und anschließend verdichte sie in einer Pivot-Tabelle. Das Bereinigen ( von unspezifischen Anmerkungen) und die Pivot-Tabelle schiebe ich noch dazu.
Doch das mit dem Extrahieren der richtigen Monate, habe ich im Alleingang nicht sauber lösen können.
An der Struktur deines Code's wird mir klar, dass meine Aufgabe für meinen Wissensstand unlösbar war.
Du hast es echt drauf!
Nochmals vielen Dank und beste Grüße,
André

Anzeige
gerne
08.03.2016 13:15:32
Michael
Hi André,
vielen Dank für die freundliche Rückmeldung.
Ich hatte mir noch überlegt, die kopierten Daten zu sortieren, aber wenn Du sowieso eine Pivot-Auswertung machst, ist das überflüssig.
Na, dann wünsche ich weiterhin happy exceling,
Michael

329 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige