Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Marta,
ho un file excel in cui, tramite un bottone nel Foglio1, apro una form di ricerca per intervallo di date (con due caselle di testo, rispettivamente CASELLARICERCADA e CASELLARICERCAA) che nel Foglio2 della stessa cartella di lavoro mi dovrebbe trovare i dati corrispondenti all'intervallo richiesto e poi caricali nel Foglio1 della stessa cartella di lavoro.
Quanto sopra con questo codice VBA:
Private Sub INSERISCIPERDATA_Click()
Dim ur As Long
Dim rng As Range
Dim c As Range
Dim cont As Long
Dim SommaColE As Integer
cont = 0
With Worksheets("Foglio2")
ur = .Range("B" & Rows.Count).End(xlUp).Row
Set rng = .Range("B2:B" & ur)
For Each c In rng
If c.Value >= CASELLARICERCADA.Text And c.Value <= CASELLARICERCAA.Text Then
Set sh1 = ThisWorkbook.Worksheets("Foglio1")
With sh1
RigaColA = sh1.Range("A" & Rows.Count).End(xlUp).Offset(1).Row
sh1.Range("A" & RigaColA) = c.Offset(0, -1).Value
RigaColB = sh1.Range("B" & Rows.Count).End(xlUp).Offset(1).Row
sh1.Range("B" & RigaColB) = c.Value
RigaColC = sh1.Range("C" & Rows.Count).End(xlUp).Offset(1).Row
sh1.Range("C" & RigaColC) = c.Offset(0, 1).Value
RigaColD = sh1.Range("D" & Rows.Count).End(xlUp).Offset(1).Row
sh1.Range("D" & RigaColD) = c.Offset(0, 2).Value
RigaColE = sh1.Range("E" & Rows.Count).End(xlUp).Offset(1).Row
sh1.Range("E" & RigaColE) = c.Offset(0, 3).Value
End With
Unload FORMINSERISCIPERDATA
End If
Next
Set rng = Nothing
End With
End Sub
Il mio problema è il seguente: se cerco, per esempio, nell'intervallo di date che va dal 01/04/2016 al 30/04/2016, vorrei che mi trovasse i dati che ricadono in quell'intervallo, né più né meno, (quindi mi deve restituire, ad esempio, la corrispondenza al 02/04/2016, al 05/04/2016, al 10/04/2016, al 15/04/2016, al 28/04/2016, ecc..., insomma in base a quello che trova in quell'intervallo) e invece mi trova dati che corrispondono anche prima del 01/04/2016 (ad esempio 13/03/2016) e dopo il 30/04/2016 (ad esempio 02/05/2016).
Come modifico il codice di cui sopra, affinché mi trovi solo i dati che cadono esattamente nell'intervallo richiesto, ad esempio dal 01/04/2016 al 30/04/2016, non prima né dopo?
La ragione di fondo del tuo problema è che stai cercando di confrontare i valori delle due caselle di testo con valori di data sul foglio di lavoro di interesse. Il valore di una casella di testo sarà sempre un valore di testo, mentre Excel memorizza sempre date internamente come un numero che rappresenta il numero di giorni trascorsi dallo 0/gen /1900. Al fine di effettuare correttamente il confronto, il tuo codice deve convertire i valori di testo delle due caselle di testo in date. Pertanto, prova a sostituire:
If c.Value >= CASELLARICERCADA.Text And c.Value <= CASELLARICERCAA.Text Then
con:
If c.Value >= CDate(CasellaRicercaDa.Text) _
And c.Value <= CDate(CasellaRicercaA.Text) Then
===
Regards,
Norman