Bè, se le righe non sono ordinate per data, come nel tuo esempio, c'è poco da fare, devi necessariamente scorrere tutto il foglio.

Credo che non servirebbe neanche ordinare i dati su un foglio nascosto e poi accedere a quelli perché per ordinarli excel dovrebbe comunque leggerli tutti e quindi velocizzeresti la macro ma a costo di un rallentamento iniziale per ordinarli.

Un'idea potrebbe essere quella di creare una cosiddetta "lista invertita" cioè un elenco, data per data, delle righe che si riferiscono a quella data.

E' un sistema che veniva utilizzato da ADABAS, un vecchio DB su mainframe che aveva prestazioni eccezionali in velocità di accesso ai dati proprio grazie a questa struttura.

Per capirci, una lista invertita è una cosa fatta cosi:

codice:
Data        Righe

10/01/2013  1 5 7 18 31 54
11/01/2013  2 28 42 43
12/01/2013  8 12 13 14 22
ecc...
In pratica dovresti fare una macro che viene attivata nel momento in cui si inserisce una riga e che va ad aggiornare la lista invertita (da memorizzare su un foglio apposito, magari nascosto) inserendo il numero di riga in corrispondenza della data giusta e poi, quando si tratta di recuperare i dati, scorri la lista fino alla prima data richiesta, estrai tutte le righe e continui così fino all'ultima data. A quel punto esci dal ciclo con una exit for.

Il risultato dovrebbe essere:
- un leggerissimo appesantimento in fase di inserimento dei dati dovuto all'aggiornamento della lista
- un aumento di dimensioni della base dati dovuto alla presenza della lista
- un miglioramento della velocità di accesso ai dati, tanto più marcato quanti più dati ci sono.

Se poi le date sono tante e quindi anche l'accesso sequenziale alla lista per cercare la prima data da estrarre diventa troppo lungo, puoi provare con una ricerca dicotomica ma di questo magari parliamo un'altra volta.

Valuta tu.
Ciao