031. Count IF parametrizzato

Download PDF

Domanda:

Buonasera vorrei porgere un quesito magari potrete aiutarmi a risolverlo.
Ho creato un menu\’ a tendina con dove ho inserito una lista di nomi, nella cella a fianco con la formula del \”SE\” ho fatto in modo che quando nella cella con menu\’ a tendina scelgo un nome nella cella a fianco compaia una sigla in automatico, per cui ad ogni nome del menu\’ tendina corrisponde una sigla.
Ora vorrei fare in modo che oltre al nome e alla sigla compaia in automatico un numero che sia progressivo a parità di Nome e sigla esempio:
CELLA A TENDINA NOME (PEPPE) – CELLA A FINCO IN AUTOMATICO SIGLA (PEP)- CELLA A FIANCO IN AUTOMATICO NUMERO (01) e così per ogni Nome Visualizzato nelle celle con Menù a Tendina.
Vorrei però che se evidenzio nuovamente nelle celle con menù a tendina il nome (PEPPE)oltre alla sigla che già compare la cella dove è presente il numero, calcoli quanti \”PEPPE\” sono evidenziati nelle celle con menù a tendina e assegni il numero progressivo corretto riferito a \”PEPPE\” la stessa cosa vorrei che succedesse per ogni nome che venga evidenziato nella Cella con menù a tendina…..Concludendo se ci sono tre Peppe gia presenti inserendo il quarto in automatico la cella nel numero deve riportare il N° 04.

Risposta:

Per conteggiare il numero di ricorrenze all’interno di un intervallo, si usa la funzione “CountIF” (Somma.se)
Con un utilizzo normale, inserendo nella colonna A 4 volte “Peppe” e trascinando la formula =COUNTIF(A:A;A2) nella colonna C,
otterremmo per ciascuna riga in cui appare “Peppe” il valore 4.

Per risolvere il problema dovremmo modificare per ciascuna riga l’intervallo da considerare per il conteggio,
che deve andare dalla riga 2 alla riga in cui stiamo inserendo la formula.
In pratica dovrremmo inserire:

C2 = COUNTIF(A2;A2)
C3 = COUNTIF(A2:A3;A3)
C4 = COUNTIF(A2:A4;A4)
C5 = COUNTIF(A2:A5;A5)

Questo metodo non è assolutamente comodo in quanto dovremmo scrivere tante formule diverse quante sono le righe.
Per fortuna il VBA ci viene in aiuto.

Last_Row = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

For i = 2 To Last_Row

If Sheet1.Cells(i, 1) <> "" Then
   Sheet1.Cells(i, 3) = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Sheet1.Cells(i, 1))
End if

Next i

Con questo ciclo, per ogni riga che contiene nella colonna A un valore,
inserisco direttamente il valore della formula incrementando di volta in volta l’intervallo da considerare.

In allegato il file d’esempio. La ma macro viene lanciata attraverso il bottone “Aggiorna”
APRI

Riccardo Vincenti

The following two tabs change content below.