Perché la mia funzione COUNTIF di Excel restituisce sempre un valore di "0"?


1

Ho una cartella di lavoro di Excel in cui ogni cella nella colonna B contiene una breve favola (storia). Queste celle (che sono formattate "Generale") contengono valori di testo elevati per gli standard dei fogli di calcolo: tutti tranne uno ha superato il limite di 255 caratteri per la visualizzazione del testo, una cella contiene più di 3.000 caratteri e immagino che la maggior parte sia compresa tra 500 e 700 caratteri. La seconda illustrazione sotto mostra una cella del genere.

In un'altra cartella di lavoro, ho (meta) dati sulle favole. In particolare, sono interessato alla frequenza di occorrenza di alcune parole. Nell'illustrazione immediatamente sotto, la colonna C contiene un elenco delle parole che mi interessano. La colonna B contiene il numero totale di occorrenze della parola corrispondente (contando più occorrenze all'interno di una favola); è irrilevante per questa domanda. Voglio anche contare il numero di favole in cui appare ogni parola (almeno una volta). Io chiamo questa "dispersione" (vedi spiegazione nel commento sotto). Ho usato Ctrl+ F("Trova e sostituisci") e facendo clic su "Trova tutto", che riporta un conteggio delle celle che contengono la stringa di ricerca (vedere la seconda illustrazione di seguito). L'ho fatto uno alla volta, per ogni parola,


(Probabilmente puoi saltare questo paragrafo.)   Ho bisogno di conteggi per singole istanze di parole intere e forme non derivate di parole radice (nemmeno plurali). Ad esempio, il mio conteggio per "animale" deve restituire conteggi solo per "animale", non "animales" o qualsiasi altra variazione del genere. All'inizio, mi sono reso conto che la semplice ricerca di una parola poteva portare a un conteggio falso perché includeva parole che contenevano la parola che stavo cercando. Ho risolto questo problema riempiendo i miei termini di ricerca con spazi all'inizio e alla fine, nella colonna E (ad es. "Animale"), che contiene=" "&C2&" "- e assicurando che la colonna sulla quale sto controllando queste parole abbia isolato anche tali parole. Ovunque un segno di punteggiatura cadesse adiacente all'ultima o alla prima lettera di una parola in una favola, ho inserito uno spazio per eliminare tale adiacenza. Ad esempio, "todo esto, porque siendo" è diventato "todo esto, porque siendo". (Ciò è stato in parte ispirato dal commento di JNevill su questa domanda: Excel COUNTIF non funziona .) Le mie ricerche Ctrl+ Fquindi restituite contano per me singole istanze delle parole che ho cercato.


Naturalmente questo è noioso, richiede tempo e soggetto a errori, quindi mi sono chiesto se una formula non sarebbe in grado di fare la stessa cosa, ma più velocemente. Un paio di post / pagine web hanno suggerito che la COUNTIFfunzione potrebbe essere in grado di ottenere questo risultato, quindi ci ho provato, ma finora i miei tentativi sono falliti ogni volta. Nell'illustrazione sopra, la colonna M contiene

=COUNTIF('[OTHER WORKBOOK.xlsx]SHEET'!$B:$B,E2)

e come puoi vedere, sta mostrando uno "0" quando dovrebbe corrispondere al numero nella colonna N (cioè, il conteggio trovato usando Ctrl+ F). (Come indicato sopra, la colonna E contiene la stringa che sto cercando, che è la parola che sto cercando, riempita con spazi all'inizio e alla fine.) Ogni configurazione che utilizza la COUNTIFfunzione che ho provato non è riuscita.

Di seguito un'immagine della cella B23 nel mio foglio di lavoro delle favole (ovvero una favola). La vista è parzialmente ostruita da una finestra di dialogo "Trova e sostituisci", che mostra che 13 celle (favole) contengono la parola "animale" (cioè contengono la stringa "animale", con spazi iniziali e finali) almeno una volta.

(Potrebbe essere necessario ingrandire la vista dell'immagine per vederlo chiaramente.)

L'ultima cosa che ti mostrerò è cosa succede quando uso la COUNTIFfunzione. Penso che potrebbe essere la chiave del motivo per cui non riesco a farlo funzionare, perché non appena aggiungo l'intervallo dalla colonna necessaria, prima ancora di premere Enter, vedo #VALUE!; #VALUE!; …accanto all'intervallo. Sembra così:

Quando premo Enter, ottengo lo "0" che vedi per le celle in quella colonna.

Che cosa sto facendo di sbagliato? Come posso contare il numero di favole in cui appare ogni parola (almeno una volta)?

Se non puoi dirlo dagli screenshot, sto usando Excel 2007.


1
Solo un'ipotesi, ma i criteri di countif contano corrispondenze esatte a livello di cella. Non funziona come una funzione "contiene". La ricerca funziona perché funziona su una base "contiene". A parte questo, il col N non corrisponde al col B. Se questo è importante e già descritto, l'ho perso perché la domanda è piuttosto lunga.
fixer1234

La tua domanda potrebbe beneficiare di ulteriori spiegazioni. Non so cosa intendi per "Dispersione", e non vedo nessun posto che descriva in modo conciso ciò che stai cercando di fare. (Credo di averlo messo insieme.)
Scott

@ fixer1234 Hai un occhio acuto. Hai ragione, N non corrisponde a B. B può contenere più di N o corrispondere ma non può superarlo. Ogni cella in un foglio di calcolo che ho contiene una favola ed è quello che sto cercando di ottenere un buon conteggio. B rappresenta il numero totale di volte in cui appare la parola. Alcune parole appaiono più di una volta in una favola.
Lisa Beck,

@Scott Ho davvero sentito che i dettagli più minuti sono andati un po 'troppo in profondità per la maggior parte, ma se i miei nomi di colonne brevi sono davvero interessanti e pensi che possano aiutare, sto davvero solo cercando di ottenere la frequenza e l'ampiezza delle parole in un set di documenti. La frequenza è proprio questo: il numero di volte in cui la parola appare in una serie di documenti; ampiezza si riferisce a quanti documenti appare la parola. Uso "dispersione" anziché "ampiezza" semplicemente perché "dispersione" mi sembra una parola più precisa di "ampiezza". Questo aiuta?
Lisa Beck,

Ho escogitato un'analogia che potrebbe aiutare gli altri a capirlo meglio e forse usare qualsiasi formula (s) che genera da questo post per altri scopi. Supponiamo che tu voglia esaminare quanto sono sicuri i conducenti in varie aree metropolitane. Naturalmente, vorresti raccogliere dati non solo sulla frequenza degli incidenti stradali (il numero totale) ma anche sulla dispersione o ampiezza di tali incidenti - su quante strade diverse / su quante diverse intersezioni, ecc.
Lisa Beck,

Risposte:


2

@ fixer1234 ha ragione: COUNTIFconta le celle uguali a un valore, non le celle che contengono una stringa. Per questo, è necessario utilizzare FINDo SEARCH. (Sono identici, tranne che per la FINDdistinzione tra maiuscole e minuscole e non distingue tra maiuscole e SEARCHminuscole. Immagino solo che si desideri quella senza distinzione tra maiuscole e minuscole.)

Inizia facendo

=SEARCH(E2, '[OTHER WORKBOOK.xlsx]SHEET'!B1)

Questo cercherà il valore di E2(nel tuo esempio "animale") nella cella  B1dell'altro foglio di lavoro. Se quel valore di stringa è presente in quella cella, questo restituirà la posizione della prima occorrenza della stringa di ricerca nel testo della cella (con il primo carattere che è 1). Se la stringa non è presente, verrà restituita #VALUE!.

Quindi, fallo

=IF(ISERROR(SEARCH(E$2, '[OTHER WORKBOOK.xlsx]SHEET'!B1)), 0, 1)

Ciò valuterà 1 se la stringa è presente e 0 se non lo è. Il prossimo passo è:

=SUM(IF(ISERROR(SEARCH(E2, '[OTHER WORKBOOK.xlsx]SHEET'!$B:$B)), 0, 1))

Questo somma la formula precedente lungo la colonna  Bdell'altro foglio di lavoro, dandoti il ​​conteggio desiderato. Si noti che quanto sopra è una formula di matrice . Ciò significa che, per farlo funzionare, è necessario digitare Ctrl+ Shift+ Enter dopo aver digitato la formula. Ora puoi metterlo nella cella  M2e trascinarlo verso il basso.

Non hai davvero bisogno di avere una colonna  E: puoi gestirla nella tua SEARCHformula:

=SUM(IF(ISERROR(SEARCH(" "&C2&" ", '[OTHER WORKBOOK.xlsx]SHEET'!$B:$B)), 0, 1))

Ho provato questo in Excel 2013, ma ho già fatto cose del genere prima e mi aspetto che questa soluzione funzionerà in Excel 2007. (E ho provato con celle con più di 750 caratteri e con un nome file della cartella di lavoro che contiene un spazio.)

PS Non so perché hai riscontrato quegli #VALUE!errori nella finestra di dialogo "Argomenti funzione"; ha funzionato per me:

Finestra di dialogo "Argomenti funzione"

(L'ho provato anche se la mia risposta non lo usa COUNTIF.) Hai l'altra cartella di lavoro aperta mentre lo stai facendo?


Non vedo l'ora di sperimentare il tuo suggerimento. Prima di farlo, affronterò un paio di cose molto velocemente qui. Per i principianti, sì, la tua supposizione che avrei dovuto usare una ricerca insensibile al maiuscolo / minuscolo era corretta. E per rispondere alla domanda che hai posto alla fine, sì, ho aperto l'altra cartella di lavoro quando provo a sperimentare varie formule. Prima di partire per sperimentare il tuo, grazie per aver dedicato del tempo a testarlo in modo così approfondito e rispondere così chiaramente a questo. Anche se la formula non finisce per funzionare per me, ti ringrazio per la qualità della tua risposta.
Lisa Beck,

Devo ammettere che ero un po 'scettico sul fatto che avrebbe funzionato dopo aver completato il primo passo, ma ho mantenuto la fede e l'ho portato a termine. Non ho fatto uno di quei super scrupolosi controlli, ma un rapido controllo a campione indica che la tua formula ha funzionato come un fascino. Assolutamente geniale, @Scott. È facile darti il ​​segno di spunta per questo.
Lisa Beck,

Sono felice di poterti aiutare.
Scott,

0

Ho qualche problema a vedere i tuoi screenshot, ma dato che stai provando a contare l'output di altre funzioni, proverei a usare la funzione value () nella tua istruzione countif. Value () dirà a Excel di guardare l'output (cosa vedi nelle celle) piuttosto che la funzione sottostante che hai scritto in esse.

La tua dichiarazione countif sarebbe simile a "= countif (valore (intervallo [altro foglio di lavoro]), criteri)"


Risposta interessante, sebbene in qualche modo contraddittoria rispetto a ciò che altri hanno affermato di essere limiti della funzione COUNTIF. Se sto interpretando male qualcosa qui, per favore non essere offeso. Non sto cercando di essere scortese ... sto semplicemente esprimendo un'osservazione. Apprezzo il fatto che tu abbia tentato di rispondere a questa domanda e se la mia sperimentazione con il suggerimento di Scott non dovesse funzionare, ti darò sicuramente una possibilità. Cavolo, potrei anche sperimentare con il tuo anche se funziona. Grazie ancora per averlo suggerito.
Lisa Beck,

Devo ammettere che non ho provato troppe varianti della tua formula per vedere se riuscivo a farlo funzionare, ma l'unico messaggio che ho ricevuto costantemente dopo aver tentato era che avevo troppi argomenti nella formula. Sebbene il tuo suggerimento non abbia funzionato per me, grazie per aver fatto lo sforzo di provare ad aiutarmi in questo.
Lisa Beck,

0

Se la stringa lunga è in B2 e la parola che stai cercando è in C2, la seguente formula fornisce il conteggio di quante volte la parola è nella stringa

  • = + SE.ERRORE ((LEN (B2) -LEN (SOSTITUTO (B2, C2, ""))) / LEN (C2), "")

Le parti sono

  1. Iferror (opzionale) lo rende vuoto in caso di errore
  2. Lunghezza Len (b2) della cella originale
  3. LEN (SUBSTITUTE (B2, C2, "") elimina tutte le occorrenze del pattern. Questo sarà più breve se è nei dati
  4. Lunghezza Len (c2) del motivo se lunga 6 caratteri e ci sono 3 ricorrenze, 18/6 comporteranno un 3

0

È possibile utilizzare COUNTIF () per contare se una stringa ne contiene un'altra sfruttando l'uso di caratteri jolly, come fornito da Microsoft. L'asterisco (*) corrisponde a zero o più caratteri, mentre il punto interrogativo (?) Corrisponde a un singolo carattere.

Quindi, invece di =COUNTIF('[OTHER WORKBOOK.xlsx]SHEET'!$B:$B,E2) usare =COUNTIF('[OTHER WORKBOOK.xlsx]SHEET'!$B:$B,"*"&E2&"*").

Gli asterischi consentono qualsiasi altro testo prima e dopo la stringa. Poiché la stringa ha già spazi iniziali e finali, non dovrebbero esserci problemi con i plurali e altre forme di parole.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.