Condividi tramite

Formula per contare celle che contengono una predeterminata porzione di testo. Conta.Se() non basta.

Anonimo
2016-12-05T20:06:21+00:00

Un saluto a tutti. Primo post. Excel 2007 e 2010 su W7 tutti i SP.

Nella colonna A ho diverse stringhe di testo in colonna: Luogo1, Luogo2, Luogo3, Luogon...;

Nella colonna B celle vuote che conterranno il totale delle ricorrenze dei valori in colonna A in un determinato intervallo (p.e. "C1:Gn");

Utilizzando Conta.Se() non ci sono problemi e tutto funziona correttamente.

Il problema è che nell'intervallo possono apparire anche diversi luoghi simultaneamente (p.e. Luogo1 + Luogo2) oppure alcuni modificatori della stringa stessa (p.e. Luogo1 3px, Luogo2 1px) e con tale situazione il Conta.Se() non è più sufficiente. I modificatori possono essere diversi e prevederli tutti (così da strutturare un Conta.Se() che contempli tutti i casi) diventerebbe problematico.

A me servirebbe di verificare se la cella contenga almeno la stringa Luogo1, Luogo2,... o Luogon a prescindere se i, e quali, modificatori siano presenti.

In vba si potrebbe utilizzare la funzione InStr() cella per cella utilizzando un ciclo for next per visitare tutte le celle del range.

Se possibile vorrei evitare l'utilizzo di vba ed arrangiarmi con le funzioni disponibili sul foglio, ma non trovo nulla che operi su un'intero intervallo valutando "pezzi" di stringa e non solo stringhe intere.

Spero di essere stato chiaro e comprensibile. In caso contrario cercheró di dettagliare ancor di più quanto mi serve.

Peccato che non si possano "allegare" screenshot, altrimenti sarebbe stato tutto molto più comprensibile ed immediato.

Ringrazio anticipatamente.

Nicholas

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2016-12-06T18:01:31+00:00

Ciao Nicholas,

Grazier per la pronta e risolutiva risposta.

Prego!

Il calcolo matriciale da immettere direttamente nella cella {} o tramite le formule già disponibili mi è sempre stato ostico.

La mia formula non e' matriciale: viene confermata con il semplice invio.

Adattando la tua formula (ovvero inserendola n volte con le dovute modifiche agli intervalli ed alla stringa da trovare all'interno di SOMMA() ) adesso anche sotto la singola colonna posso avere i totali parziali che il solo Conta.Se() non riusciva a darmi, specie in presenza di stringhe complesse (Luogo1 + Luogo2 3px).

L'unica pecca, se così la posso definire, è che al contrario del Conta.Se() che è case-insentive, la formula da te proposta mi funziona solo se la stringa per il TROVA() è = alla stringa digitata.

Non so proprio come risolvere. L'idea è di usare MAIUSC() per modificare sia la stringa da ricercare sia la stringa digitata così che il TROVA() possa funzionare correttamente. Questo approccio è semplice dal lato TROVA() ma non so come applicarlo alla parte <intervallo da valutare>.

Il foglio viene popolato da più utenti e purtroppo, anche se istruiti, talvolta potrebbe capitare (e capita) di trovare un LUOgo1 piuttosto che lUOGO2 ecc.

In allegato uno screenshot in cui in rosso sono indicati gli errori. LUOgo1 non viene infatti contato né sul totale di Luogo1, che dovrebbe essere 5 anziché 4 né sul totale della colonna C che dovrebbe essere 5 anziché 4.

Nicholas.

Potresti risolvere il tuo problema sostituendo la funzione TROVA nella mia formula con la funzione RICERCA, la quale agisce in modo case-insensitive.

=MATR.SOMMA.PRODOTTO(-- VAL.NUMERO(RICERCA(A1;$C$1:$F$100)))

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

11 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-12-06T19:25:08+00:00

    Ciao a tutti,

    fuori tempo massimo: un approccio appena diverso, forse interessante.

    Sfrutto lo schema proposto da Norman David Jones, che saluto.

    =CONTA.NUMERI(INDICE(RICERCA(A1;$C$2:$F$100);0))

    La formula non ha bisogno del sigillo matriciale.

    Basta copiarla ed adattarne i riferimenti.

    Se servisse...

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  3. Anonimo
    2016-12-06T17:12:32+00:00

    Grazier per la pronta e risolutiva risposta.

    Il calcolo matriciale da immettere direttamente nella cella {} o tramite le formule già disponibili mi è sempre stato ostico.

    Adattando la tua formula (ovvero inserendola n volte con le dovute modifiche agli intervalli ed alla stringa da trovare all'interno di SOMMA() ) adesso anche sotto la singola colonna posso avere i totali parziali che il solo Conta.Se() non riusciva a darmi, specie in presenza di stringhe complesse (Luogo1 + Luogo2 3px).

    L'unica pecca, se così la posso definire, è che al contrario del Conta.Se() che è case-insentive, la formula da te proposta mi funziona solo se la stringa per il TROVA() è = alla stringa digitata.

    Non so proprio come risolvere. L'idea è di usare MAIUSC() per modificare sia la stringa da ricercare sia la stringa digitata così che il TROVA() possa funzionare correttamente. Questo approccio è semplice dal lato TROVA() ma non so come applicarlo alla parte <intervallo da valutare>.

    Il foglio viene popolato da più utenti e purtroppo, anche se istruiti, talvolta potrebbe capitare (e capita) di trovare un LUOgo1 piuttosto che lUOGO2 ecc.

    In allegato uno screenshot in cui in rosso sono indicati gli errori. LUOgo1 non viene infatti contato né sul totale di Luogo1, che dovrebbe essere 5 anziché 4 né sul totale della colonna C che dovrebbe essere 5 anziché 4.

    Nicholas.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-12-05T20:50:04+00:00

    Ciao Nicholas,

    Benvenuto alla Community

    Nella colonna A ho diverse stringhe di testo in colonna: Luogo1, Luogo2, Luogo3, Luogon...;

    Nella colonna B celle vuote che conterranno il totale delle ricorrenze dei valori in colonna A in un determinato intervallo (p.e. "C1:Gn");

    Utilizzando Conta.Se() non ci sono problemi e tutto funziona correttamente.

    Il problema è che nell'intervallo possono apparire anche diversi luoghi simultaneamente (p.e. Luogo1 + Luogo2) oppure alcuni modificatori della stringa stessa (p.e. Luogo1 3px, Luogo2 1px) e con tale situazione il Conta.Se() non è più sufficiente. I modificatori possono essere diversi e prevederli tutti (così da strutturare un Conta.Se() che contempli tutti i casi) diventerebbe problematico.

    A me servirebbe di verificare se la cella contenga almeno la stringa Luogo1, Luogo2,... o Luogon a prescindere se i, e quali, modificatori siano presenti.

    In vba si potrebbe utilizzare la funzione InStr() cella per cella utilizzando un ciclo for next per visitare tutte le celle del range.

    Se possibile vorrei evitare l'utilizzo di vba ed arrangiarmi con le funzioni disponibili sul foglio, ma non trovo nulla che operi su un'intero intervallo valutando "pezzi" di stringa e non solo stringhe intere.

    Spero di essere stato chiaro e comprensibile. In caso contrario cercheró di dettagliare ancor di più quanto mi serve.

    Per restituire il numero di volte che si trova il testo della cella A1 nell'intervallo C1:F100, nella cella B1 immetti la formula:

    =MATR.SOMMA.PRODOTTO(-- VAL.NUMERO(TROVA(A1;$C$1:$F$100)))

    Trascina la formula in basso quanto necessario:

    Potresti scaricare il mio file di prova Nicholas20161205.xlsx a:

    https://www.dropbox.com/s/bueueutnifjrole/Nicholas20161205.xlsx?dl=0

    Peccato che non si possano "allegare" screenshot, altrimenti sarebbe stato tutto molto più comprensibile ed immediato.

    Potresti inserire uno screenshot faccendo clic sull'icona qui:

                              

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento