WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 26.07.2004, 18:05   #1
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard Monatsanteil errechnen in VBA/ACCESS

ich melde mich nochmal im Fall ACCESS/VBA

ich bin jetzt schon ziemlich weit, allerdings liegt noch ein Problem vor mir, das ich nicht knacken konnte:

in einer Tabelle werden VON und BIS daten in zwei Spalten eingetragen (ZB: 01.10.2000 20.10.2000)

jetzt möchte ich in eine dritte Tabellenzelle eintragen lassen, wie groß der Anteil am Monat Oktober ist.

also müsste ich 20/30=2/3=0,666 irgendwie in die Tabelle bekommen.

a) wie bekomme ich (in VBA) am einfachsten die Anzahl der Tage heraus?

b) wie kann ich dann herausfinden, wie viele Tage der monat gerade hat (also müsste ich xx.10.xxxx als Oktober identifizieren können, Schaltjahre sind egal)

c) wie bekomme ich das dann am sichersten in die dritte Spalte der Tabelle (recordset.with etc nehm ich an)

wenn jemand eine Idee hat bitte versuche gleich Code zu schreiben, ich steck in dem Problem jetzt schon 3 Tage fest.. aber auch ein kleiner Tipp ist sicher hilfreich !

mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 26.07.2004, 18:37   #2
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Hi!

Kannst du das Problem auch für "einfache" Geister beschreiben. Ich versteh nur Bahnhof.

Ansonsten kann die Lösung nicht so schwer sein.

mfg

WB
wbendl ist offline   Mit Zitat antworten
Alt 26.07.2004, 18:44   #3
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von wbendl
Hi!

Kannst du das Problem auch für "einfache" Geister beschreiben. Ich versteh nur Bahnhof.

Ansonsten kann die Lösung nicht so schwer sein.

mfg

WB
das habe ich befürchtet

in einer Tabelle stehen in zwei spalten von und bis-daten

für jede Person werden da laufend daten angelegt.
in der letzten Spalte sollte jetzt als dezimale zahl stehen, wie viele Anteile die Arbeitszeit in Tagen am ganzen Monat hat.

also wenn er 10 tage arbeitet sind das (in einem 30-Tage Monat) 1/3

also Schritte:

Daten einlesen (Von-Bis) dann die Tage ausrechen (also die Different bilden nehm ich an" Bis (minus) Von")

dann durch die Anzahl der Monatstage dividieren (also 28, 30 oder 31 Tage), wobei ich die Anzahl der Tage im Monat wenn möglich auch aus einer Tabelle auswählen möchte->
also das das Script erkennt -> 2.10.2000 bis 15. 10.2000 sind 14 Tage und der Oktober (kann ich das aus den Daten herausfinden lassen xx.10.xxx=Oktober ? kann nicht über die Monatsgrenzen gehen!!) hat 31 Tage also
14/31=0,45 (Anteil)

... oje das ist nicht viel einfacher gelungen
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 26.07.2004, 20:32   #4
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Könnte ungefähr so funktionieren:

Function PartOfMonth(strDateEnd As String, strDateStart As String)

Dim intDaysCount As Integer

intDaysCount = Day(strDateEnd) - Day(strDateStart) + 1

PartOfMonth = intDaysCount / DaysPerMonth(strDateStart)

End Function

Function DaysPerMonth(strDate As String) As Integer

Dim intMonth As Integer

intMonth = Month(strDate)

Select Case intMonth
Case 1, 3, 5, 7, 8, 10, 12
DaysPerMonth = 31
Case 2
DaysPerMonth = 28
Case 4, 6, 9, 11
DaysPerMonth = 30
End Select

End Function


mfg

WB
wbendl ist offline   Mit Zitat antworten
Alt 26.07.2004, 21:20   #5
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von wbendl
Könnte ungefähr so funktionieren:

Function PartOfMonth(strDateEnd As String, strDateStart As String)

Dim intDaysCount As Integer

intDaysCount = Day(strDateEnd) - Day(strDateStart) + 1

PartOfMonth = intDaysCount / DaysPerMonth(strDateStart)

End Function

Function DaysPerMonth(strDate As String) As Integer

Dim intMonth As Integer

intMonth = Month(strDate)

Select Case intMonth
Case 1, 3, 5, 7, 8, 10, 12
DaysPerMonth = 31
Case 2
DaysPerMonth = 28
Case 4, 6, 9, 11
DaysPerMonth = 30
End Select

End Function


mfg

WB
ahhh die DAY() Funktion gibt mir einen entscheidenden Lichtblick!!

erneut Danke

mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 26.07.2004, 21:25   #6
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Standard

das geht auch einfacher:

Anteil = DateDiff("d", DATUM_VON, DATUM_BIS, vbMonday, vbFirstJan1) / Day(DateSerial(Year(Date), Month(Date) + 1, 0))
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Alt 27.07.2004, 12:02   #7
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 39
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von Hussl
das geht auch einfacher:

Anteil = DateDiff("d", DATUM_VON, DATUM_BIS, vbMonday, vbFirstJan1) / Day(DateSerial(Year(Date), Month(Date) + 1, 0))
diese Funktion schaut sehr interessant aus! kannst du mir vlt die Erklärung des hinteren Teils (nach "/") erklären?

bekomme ih durch die DateSerial() die Anzahl der Tage? und was muss nach Year() und Month() in den KLammern stehen? (welcher Teil des Datums)

kann ich nicht einfach zb 12.2.2000 verwenden? muss ich 12/2/2000 schreiben (bzw kann ich das irgedwie einfach umwandeln? meine Datumsfelder haben nämlich das format dd.mm.yyyy ... )

mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 27.07.2004, 13:02   #8
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Standard

Hi, aus der Access-Hilfe:

DateSerial()
...
Das folgende Beispiel verwendet numerische Ausdrücke anstelle von absoluten Datumszahlen. Die DateSerial-Funktion gibt in diesem Fall das Datum für den Tag vor dem ersten Tag (1 - 1) des Monats zurück, der zwei Monate vor August (8 - 2) liegt, und zwar 10 Jahre vor dem Jahr 1990 (1990 - 10). Das Ergebnis ist der 31. Mai 1980.

DateSerial(1990 - 10, 8 - 2, 1 - 1)
...

Das heißt in unserem Fall, dass wir das aktuelle Jahr, das nächste Monat, und den Tag vor dem ersten des (angegebenen) nächsten Monats bekommen. Sprich den letzten Tag des aktuellen Monats.

Wenn ich nun den letzten Tag des Monats Juli haben will, dann muss die Syntax so ausschauen:

DateSerial(2004, 9, 1-1) (Da nach Adam Riese 1-1 gleich 0 ist, kann man auch 0 schreiben, aber 1-1 ist sicher einfacher nachzuvollziehen)
Aus dieser Funktion bekomme ich das Ergebnis 31.08.2004. Jetzt noch ein Day("31.08.2004") und ich hab die gewünschte Zahl 31!

Ist alles ein bissl kompliziert, aber wenn man das mal durchschaut, dann gehts schon
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:23 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag