Eliminare tutte le righe tranne quelle relative ad ogni fine mese

Davide ha un foglio di lavoro che include solo due colonne: una data e un valore di portafoglio per ogni data. Il foglio di lavoro contiene righe per ogni giorno di negoziazione da gennaio 1999 ad oggi. Davide deve eliminare tutte le righe tranne quelle relative all’ultimo giorno di negoziazione di ogni mese. Ha provato a filtrare, ma non ha aiutato, quindi è confuso sul modo migliore per eliminare le righe non necessarie.

Nel fornire i diversi modi con i quali affrontare questo problema, una delle chiavi della domanda su cui mi concentrerò è che Davide ha affermato che i suoi dati “hanno righe per ogni giorno di negoziazione”. Per me, questo significa che alcune date (giorni non lavorativi) non sono incluse nei suoi dati. Questo è fondamentale perché significa che non dobbiamo trovare una soluzione che, prima di decidere se mantenere una riga o meno, determini se una data è un giorno di negoziazione.

Questo in realtà rende il lavoro molto più semplice. Ora possiamo semplicemente trovare, dalle date nella colonna A, quelle righe che contengono effettivamente l’ultima data (o la “più alta”) in un dato mese. Mi concentrerò prima su un approccio manuale che si basa su una colonna di supporto. Poiché Davide ha affermato che i suoi dati sono costituiti solo dalle colonne A (data) e B (valore), suggerirò di utilizzare la colonna C come colonna di supporto (suppongo anche che la riga 1 contenga intestazioni di colonna e che i dati reali inizino nella riga 2).

Assicurati che i tuoi dati siano ordinati in modo che le date siano in ordine crescente, inserisci la seguente formula nella cella C2:

=SE(GIORNO(A3)<GIORNO(A2);"EOM";"X")

 

Copia questa formula in basso lungo tutti i tuoi dati e sostanzialmente hai finito. Ora puoi, se lo desideri, utilizzare il filtro in base alla colonna C. Se filtri in modo che vengano visualizzate solo le righe contenenti “EOM”, hai i valori finali per ogni mese. Se filtri in modo che vengano visualizzate solo le righe contenenti ‘X’, puoi eliminare quelle righe, rimuovere il filtro e avere solo le righe con i valori di fine mese nei tuoi dati.

Come spesso accade, ci sono una miriade di formule che potresti usare nella colonna C invece di quella che suggerisco. Ho suggerito questa, però, perché fa un confronto molto semplice che sarà sempre testabile, indipendentemente dal fatto che il giorno “diminuisca” di valore nella riga successiva a quella corrente. In ogni possibile scenario, questo sarà vero solo alla fine di un mese. Quindi, quella riga sarà contrassegnata con “EOM” e il resto con “X”.

Devo sottolineare che se scegli di utilizzare una formula diversa, assicurati che non verifichi se la data nella colonna A è l’ultimo giorno del mese. Come mai? Perché potrebbe non essere, ricorda che nei dati di Davide, la colonna A contiene le date dei giorni di negoziazione, ed è molto probabile che l’ultimo giorno di negoziazione di un mese non cada nell’ultimo giorno del mese (i fine settimana e le festività, in altre parole, sono esclusi, per definizione, dai dati di Davide).

Se stai utilizzando Office 365 (o ciò che Microsoft, in questi giorni, chiama Microsoft 365), c’è anche un modo per estrarre solo le date di fine mese e i relativi valori. Supponiamo che i tuoi dati siano in A2:B5000 (ricorda che A1: B1 contiene intestazioni di colonna). Inserisci la seguente formula nella cella E2:

=FILTRO(A2:B5000;GIORNO(A3:A5001)<GIORNO(A2:A5000);1)

 

Questo è tutto; una singola formula in una singola cella. Potrebbe essere necessario formattare la colonna E per visualizzare correttamente le date, ma questo utilizzo della funzione FILTRO esegue lo stesso confronto già discusso e estrae solo le date e i valori di fine mese. Ricorda, tuttavia, che funzionerà solo in Office 365; non funzionerà in Excel 2019, Excel 2016 o in qualsiasi versione precedente del programma.

Se preferisci un approccio basato su macro, la seguente breve macro svolgerà il compito:

Questo contenuto è riservato agli abbonati

Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.

Se sei già abbonato Accedi per sbloccare il contenuto!

In caso contrario abbonati qui! L'abbonamento è conveniente.

E puoi interromperlo in ogni momento e in completa autonomia.

(puoi renderti conto di quanti siano i contenuti riservati

raggiungendo questa pagina)

La macro determina l’ultima riga del foglio di lavoro (memorizzata nella variabile LastRow) e quindi utilizza un ciclo For…Next per scorrere le righe all’indietro. Se il mese della riga corrente è uguale al mese della riga successiva, la riga viene eliminata. Si noti che la macro decrementa LastRow prima di passare al ciclo For…Next. Ciò avviene perché il presupposto è che l’ultima riga di dati sarà sempre l’ultimo giorno di negoziazione dei tuoi dati.

Questa macro può essere lenta da eseguire, poiché elimina la maggior parte delle righe nel foglio di lavoro, una per una. Al termine, tuttavia, rimarranno solo i dati di fine mese.

Un’ultima nota: gli approcci utilizzati in questo suggerimento sono, ad eccezione della funzione FILTRO, distruttivi dei dati. Quando li usi, i dati nel tuo foglio di lavoro andranno persi per sempre. Ciò significa che dovresti pensarci due volte (o tre volte) prima di eseguirli su qualsiasi cosa tranne che su una copia dei tuoi dati originali.

 

LE SCHEDE TECNICHE DELLE FUNZIONI UTILIZZATE

Tags: , , , , , , , , ,

Ti è stato utile?