[Gelöst] Makro: Monate in einem Bereich zählen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

[Gelöst] Makro: Monate in einem Bereich zählen

Beitrag 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
Zuletzt geändert von GrobMakrobiker am Fr, 20.03.2009 09:26, insgesamt 1-mal geändert.
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Makro: Monate in einem Bereich zählen

Beitrag 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.
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Makro: Monate in einem Bereich zählen

Beitrag 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
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Makro: Monate in einem Bereich zählen

Beitrag 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
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Makro: Monate in einem Bereich zählen

Beitrag 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
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Makro: Monate in einem Bereich zählen

Beitrag 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
Antworten