[Risolto] Confronto intervalli date

Creare una macro - Scrivere uno script - Usare le API
Rispondi
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

[Risolto] Confronto intervalli date

Messaggio da geovign »

Un saluto al forum.
Ho necessità, con macro, di confrontare se un determinato periodo, definito da data inizio e data fine, si sovrappone ad altri periodi esistenti, sempre definiti da data inizio e data fine. La verifica dovrà avvenire tra il periodo da verificare e tutti i periodi esistenti.
-Periodi di irrigazione esistenti
dal 10/05/2023 al 15/06/2023
dal 25/08/2023 al 02/09/2023
dal 15/10/2023 al 22/10/2023
- Periodi di irrigazione da verificare
1) dal 02/05/2023 al 09/05/2023 -> risultato verifica = Vero (il periodo di irrigazione non si sovrappone con alcuno dei periodi di irrigazione esistenti)
2) dal 01/05/2023 al 10/05/2023 -> risultato verifica = Falso (la data di fine irrigazione coincide con una data di inizio irrigazione esistente)
3) dal 02/09/2023 al 12/09/2023 -> risultato verifica = Falso (la data di inizio irrigazione coincide con una data di fine irrigazione esistente)
4) dal 03/09/2023 al 13/09/2023 -> risultato verifica = Vero (il periodo di irrigazione non si sovrappone con alcuno dei periodi di irrigazione esistenti)
5) dal 05/10/2023 al 24/10/2023 -> risultato verifica = Falso (il periodo di irrigazione si sovrappone con un periodo di irrigazione esistente)
6) dal 28/08/2023 al 30/08/2023 -> risultato verifica = Falso (il periodo di irrigazione si sovrappone con un periodo di irrigazione esistente)
Allego file con stesse casistiche.
Saluti
Geo
Allegati
VerificaPeriodoIrrigazione.ods
(14.79 KiB) Scaricato 8 volte
Ultima modifica di geovign il mercoledì 24 aprile 2024, 14:15, modificato 1 volta in totale.
LibO 7 su LinuxMint 21
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8820
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Confronto intervalli date

Messaggio da charlie »

Ciao, ti segnalo questo argomento: https://forum.openoffice.org/it/forum/v ... php?t=9780, risolto sia con macro che senza.
Non coincide con la tua richiesta ma contiene elementi comuni che potrebbero servire per arrivare ad una soluzione.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Confronto intervalli date

Messaggio da geovign »

Ciao @charlie,
letto l'argomento, provato a ragionare sulle macro scritte ... e risolto.
Non ho idea se è la soluzione giusta, ma è una soluzione e direi che funziona.
Nel file che allego, ho creato una funzione alla quale vengono passate le due date (inizio e fine periodo) prelevate dalle celle.
Trasformo tutte le date in numero in modo tale da poterli utilizzare come indici in un ciclo for/next e confrontarle.

Codice: Seleziona tutto

Function VerificaPeriodi(DataInizioDaVerificare As Date, DataFineDaVerificare As Date) As Boolean 
'dati passati alla funzione: data inizio irrigazione e data fine irrigazione del periodo da verificare
	dim NumeroDataInizioRiferimento As Long
	Dim NumeroDataFineRiferimento As Long
	Dim NumeroDataInizioDaVerificare As Long
	Dim NumeroDataFineDaVerificare As Long
	Dim i riga As Long
	Dim nData As long
	'trasformo la data in un numero (ogni data ha un numero sempre diverso)	
	NumeroDataInizioDaVerificare = CLng(DataInizioDaVerificare)
	NumeroDataFineDaVerificare = CLng(DataFineDaVerificare)
	'primo ciclo: determino i numeri associati alle date di inizio e fine periodi esistenti
	For iRiga = 6 To 8
		'ottengo direttamente un numero associato alla data
		NumeroDataInizioRiferimento = ThisComponent.Sheets(0).getCellByPosition(0,iRiga).value
		NumeroDataFineRiferimento = ThisComponent.Sheets(0).getCellByPosition(1,iRiga).value
		'secondo ciclo di confronto fra date (numero trasformato da date); uso come indice il numero associato alla data
		For nData = NumeroDataInizioDaVerificare To NumeroDataFineDaVerificare
			If nData>=NumeroDataInizioRiferimento And nData<=NumeroDataFineRiferimento Then
				VerificaPeriodi = False
				Exit Function
			End If
		Next nData
	Next iRiga
	VerificaPeriodi = True
End Function
Saluti
Geo
Allegati
VerificaPeriodoIrrigazione2.ods
(16.99 KiB) Scaricato 8 volte
LibO 7 su LinuxMint 21
Rispondi