[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 10 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: 8821
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 10 volte
LibO 7 su LinuxMint 21
Rispondi