Seite 1 von 1
[Gelöst] Makro: Monate in einem Bereich zählen
Verfasst: Fr, 13.03.2009 10:06
von GrobMakrobiker
Hallo zusammen!
Ich versuche, leider erfolglos, einen Belegungsplan für eine Art Hotel auszuwerten.
Im Hotel sind 8 Zimmer, die jeweils für mehrere Monate belegt sind.
Bekannt sind
- der Beginn und
- das Ende der Belegung
- die Aufenthaltsdauer in Tagen
Wie kann ich nun die Monate zählen, in denen die Zimmer vergeben sind?
Mein Versuch startet mit:
Code: Alles auswählen
Dim objMonate(Januar,Februar,Maerz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember)
Dim n as Integer
Dim objErg as Object
Dim letzteZeile as Integer
letzteZeile = 20
For n = 6 to letzteZeile
For y = 0 to Ubound(objMonate)
If oCellSrc = objQuelle.getCellRangeByName("$U"& n) = objMonate(y) then
objErg(y) = objErg(y) + 1
next y
Next n
Das geht natürlich nicht, da nur das Startdatum gezählt werden würde, und nicht der Bereich von Start zum Ende. Also wenn jemand vom 15.1. - 10.6. da ist, würden nicht Februar- Juni gezälht werden.
Wie kann man sowas denn angehen? Hat jemand einen Tipp oder eine gute Adresse?
Vielen Dank schonmal
Euer GrobMakrobiker
Beispieldaten
Name | Beginn | Tage | Ende
A | 01.10.08 | 242 | 31.05.09
B | 01.10.08 | 181 | 31.03.09
C | 01.10.08 | 227 | 16.05.09
D | 27.09.08 | 160 | 06.03.09
Re: Makro: Monate in einem Bereich zählen
Verfasst: Fr, 13.03.2009 11:16
von GrobMakrobiker
Hallo Charly,
ja, ok, dann wüsste ich, wie viele Monate jemand da ist.
Nur - wie komme ich dann dazu, die Belegung (bzw. die Personen) pro Monat zusammenzuzählen? So dass ich bspw. wüsste:
Januar = 3
Februar = 2
März = 4?
In meiner Vorstellung müsste das doch so laufen, dass man zählt:
Anzahl Januar = Wenn(Januar Teil vom Bereich(Beginn;Ende)), dann n +1
Und das ganze pro Person...
Ich hab da irgendwo einen Knoten im Hirn....
LG G.
Re: Makro: Monate in einem Bereich zählen
Verfasst: Fr, 13.03.2009 11:21
von Charly
Hallo!
Du hast zu schnell meinen Beitrag gelesen. Ich habe beim Abschicken erkannt, dass du die Belegung pro Monat haben wolltest. Und da habe ich meinen Beitrag gleich wieder gelöscht.
An die Monatsbelegung arbeite ich noch.
Gruß
Charly
Re: Makro: Monate in einem Bereich zählen
Verfasst: Fr, 13.03.2009 11:50
von Charly
Hallo!
Hier jetzt der überarbeitete und vorhin gelöschte Code. Entschuldigung für die Irritation.
Code: Alles auswählen
Sub Monatsdifferenz
Dim stat(11)
Blatt = ThisComponent.sheets(0)
Endzeile = 4
Acc = CreateUnoService("com.sun.star.sheet.FunctionAccess")
For Zeile = 1 to Endzeile
Anfang = Blatt.getCellbyPosition(1,Zeile).value
Ende = Blatt.getCellbyPosition(3,Zeile).value
Erg = Acc.callFunction("com.sun.star.sheet.addin.DateFunctions.getDiffMonths",Array(Anfang,Ende,1)
Monat = Month(Anfang)
For I = 1 To Erg+1
Stat(Monat-1) = Stat(Monat-1)+1
Monat = Monat + 1
If Monat = 13 then
Monat = 1
End if
next I
next Zeile
For I = 0 to 11
Anzeige = "Monat" &cstr(I+1)& " " & stat(i)
MSGBOX(Anzeige)
next I
End Sub
Ich konnte jetzt leider aus Zeitmangel den Code nicht vollständig testen.
Gruss
Charly
Re: Makro: Monate in einem Bereich zählen
Verfasst: Fr, 13.03.2009 12:44
von GrobMakrobiker
Hallo nochmals,
genial! Das reicht mir erstmal, um weiter zu probieren. Vielen Dank! Für mich ein Rätsel, wie man so einen Code so schnell hinkriegt...
Werd's das nächste Mal dann im Basic-Forum versuchen, sorry!
LG GrobMakrobiker
Re: Makro: Monate in einem Bereich zählen
Verfasst: Fr, 20.03.2009 09:24
von GrobMakrobiker
Hallo nochmals,
der Code von Charly klappt super. Für alle, die an ähnlíchem sitzen, hier meine Lösung:
Code: Alles auswählen
For Zeile = 6 to letzte_Zeile
If oResults.getCellbyPosition(0, Zeile).String ="x" Then ' Auswahl der Zeilen, die in der ersten Spalte mit "x" markiert sind
Anfang = oResults.getCellbyPosition(20,Zeile).value
Ende = oResults.getCellbyPosition(22,Zeile).value
Erg = Acc.callFunction("com.sun.star.sheet.addin.DateFunctions.getDiffMonths",Array(Anfang,Ende,1) '1 = Kalenderjahre, 0 = Jahresintervall
' Erg = Anzahl der Monatsdifferenz, z.B. 4
Monat = Month(Anfang) 'Monatszahl, z.B. 11 für November
Jahr = Year(Anfang)
For I = 0 To Erg
Stat(Jahr,Monat-1) = Stat(Jahr,Monat-1) +1 'Array wird gefüllt; -1 da Zählung im Array bei 0 anfängt
Monat = Monat + 1
If Monat > 12 then
Jahr = Jahr + 1 'Das Jahr wir hochgezählt, wenn Januar kommt
Monat = 1
End if
next I
End if ' X- Schleife
next Zeile
Damit ist das einlesen fertig. Das schreiben funktioniert so:
Code: Alles auswählen
' Blatt wechseln
oResults = ThisComponent.Sheets().getByName("Monate")
ThisComponent.CurrentController.setActiveSheet(oResults)
u = 1 ' u = Zeile im Zielblatt
For t = 2005 to 2011 't = Jahr
oCellSrc = oResults.getCellByPosition(0,u) 'Variable Spalte und Zeile
oCellSrc.Value = t ' Jahr eintragen
For I = 0 to 11 'I = Durchlauf durch Monate
y = I +1 'y = dynamische Spalte von links nach rechts
oCellSrc = oResults.getCellByPosition(y,u) ''Variable Spalte und Zeile
oCellSrc.Value = stat(t,i) ' Monate eintragen
next I ' Zeile ist geschrieben
u = u + 1 ' eine Zeile weiterzählen
Next t
MsgBox "Die Monate wurden gezählt!"
Vielen Dank nochmals!
Groby