PDA

View Full Version : EXCEL cerca e conta, problema


Wertherino
01-04-2008, 13:08
Ragazii esiste una funzione di Excel che in una colonna di numeri trova e conta quanti di quei numeri soddisfano una o più condizioni? Tipo maggiore di..minore di.. etc. Grazie in anticipo

Wertherino
01-04-2008, 13:18
Ragazii esiste una funzione di Excel che in una colonna di numeri trova e conta quanti di quei numeri soddisfano una o più condizioni? Tipo maggiore di..minore di.. etc. Grazie in anticipo


Preciso, almeno due condizioni. Il COUNTIF credo non vada bene;)

zuper
01-04-2008, 13:18
Ragazii esiste una funzione di Excel che in una colonna di numeri trova e conta quanti di quei numeri soddisfano una o più condizioni? Tipo maggiore di..minore di.. etc. Grazie in anticipo

contase

zuper
01-04-2008, 13:19
Preciso, almeno due condizioni. Il COUNTIF credo non vada bene;)

moooooooo ma se mi cambi domanda mentre ti do la soluzione :D:D

zuper
01-04-2008, 13:21
countifs :D

ripeti il range per ogni criteria ;)

Wertherino
01-04-2008, 13:28
countifs :D

ripeti il range per ogni criteria ;)


COUNTIF(C8:C26,"<=30",C8:C26,">=45")

è la scrittura giusta??

zuper
01-04-2008, 13:30
COUNTIF(C8:C26,"<=30",C8:C26,">=45")

è la scrittura giusta??

COUNTIFS(C8:C26;"<=30";C8:C26;">=45")

Wertherino
01-04-2008, 13:41
COUNTIFS(C8:C26;"<=30";C8:C26;">=45")

mi dà errore zuper:confused:

zuper
01-04-2008, 14:45
hai messo il punto e virgola vero?

allega il file xls zippato che ci do un occhio :)

Wertherino
01-04-2008, 15:22
hai messo il punto e virgola vero?

allega il file xls zippato che ci do un occhio :)

è semplicemente una colonna le cui celle contengono dei numeri.ti invio uno stamp del messaggio di errore.

Wertherino
01-04-2008, 15:23
è semplicemente una colonna le cui celle contengono dei numeri.ti invio uno stamp del messaggio di errore.

cmq si, ho messo ";" come hai scritto tu;)

zuper
01-04-2008, 15:29
a me nn lo da...nn so perchè...

se puoi allega xls :)

Wertherino
01-04-2008, 16:02
a me nn lo da...nn so perchè...

se puoi allega xls :)

si puo' caricare il .rar?

Wertherino
01-04-2008, 16:21
si puo' caricare il .rar?

carico più tardi il .zip;

a dopo

Wertherino
01-04-2008, 18:37
carico più tardi il .zip;

a dopo


ecco il file, nulla di speciale. Anche nella versione italiana dubbi sul modo di scrittura per coinvolgere due condizioni contemporaneamente: una variabile compresa tra due limiti, inferiore e superiore;)

zuper
01-04-2008, 18:57
ecco il file, nulla di speciale. Anche nella versione italiana dubbi sul modo di scrittura per coinvolgere due condizioni contemporaneamente: una variabile compresa tra due limiti, inferiore e superiore;)

nin zo proprio che dirti...io ho inserito

=COUNTIFS(C8:C26;">=30";C8:C26;"<=45")

proprio sotto la tua formula che da 14

e mi esce correttamente

6

Wertherino
01-04-2008, 22:54
nin zo proprio che dirti...io ho inserito

=COUNTIFS(C8:C26;">=30";C8:C26;"<=45")

proprio sotto la tua formula che da 14

e mi esce correttamente

6

strano..sicuro che ci sia la "S"?; sul manuale leggo COUNTIF. Comunque ne riparliam domani. grazie comunque, ciao zuper

zuper
02-04-2008, 08:41
strano..sicuro che ci sia la "S"?; sul manuale leggo COUNTIF. Comunque ne riparliam domani. grazie comunque, ciao zuper

c'è la S

plurale di IF :D

Wertherino
03-04-2008, 19:32
c'è la S

plurale di IF :D

credo che la sintassi per Excel 2003 non sia corretta. COUNTIFS è nella versione 2007. A presto e grazie

MarcoGG
04-04-2008, 09:28
Preciso, almeno due condizioni. Il COUNTIF credo non vada bene;)


Ciao. Nel tuo caso, infatti, e per funzioni via via più elaborate e complesse, le semplici funzioni integrate di Excel non stanno al passo delle nostre esigenze...

Nel tuo caso specifico ti consiglio di crearti una tua funzione personalizzata, che non solo risolve questo piccolo problema, ma utile anche come "template" per funzioni con un numero illimitato di condizioni e controlli... ;)

Tutto quello che devi fare è di aprire il tuo file, entrare nell'editor VBA, e creare un nuovo Modulo di codice, nel quale mettere questa funzione :

Public Function MIA_FUNZIONE(Intervallo As String) As Long

Dim conta As Long
conta = 0
Dim Cella As Range
For Each Cella In Range(Intervallo)

'Condizione 1 :
If Cella.Value >= 30 And Cella.Value <= 45 Then
conta = conta + 1
End If

'Condizione 2 :
'...
'...

Next

MIA_FUNZIONE = conta

End Function

A questo punto, torna su Foglio1 e nella cella che deve contenere il risultato inserisci questa formula :

=MIA_FUNZIONE("C8:C26")

Dai Invio, e... fammi sapere... ;)

Wertherino
04-04-2008, 21:05
Ciao. Nel tuo caso, infatti, e per funzioni via via più elaborate e complesse, le semplici funzioni integrate di Excel non stanno al passo delle nostre esigenze...

Nel tuo caso specifico ti consiglio di crearti una tua funzione personalizzata, che non solo risolve questo piccolo problema, ma utile anche come "template" per funzioni con un numero illimitato di condizioni e controlli... ;)

Tutto quello che devi fare è di aprire il tuo file, entrare nell'editor VBA, e creare un nuovo Modulo di codice, nel quale mettere questa funzione :

Public Function MIA_FUNZIONE(Intervallo As String) As Long

Dim conta As Long
conta = 0
Dim Cella As Range
For Each Cella In Range(Intervallo)

'Condizione 1 :
If Cella.Value >= 30 And Cella.Value <= 45 Then
conta = conta + 1
End If

'Condizione 2 :
'...
'...

Next

MIA_FUNZIONE = conta

End Function

A questo punto, torna su Foglio1 e nella cella che deve contenere il risultato inserisci questa formula :

=MIA_FUNZIONE("C8:C26")

Dai Invio, e... fammi sapere... ;)

Grazie Marco, ottimo lavoro

fracarro
20-07-2008, 11:18
COUNTIFS(C8:C26;"<=30";C8:C26;">=45")

E se invece devo confrontare i valori della colonna C con la colonna D?
Mi spiego meglio. Supponiamo che io voglia sapere nell'intervallo C1:C100 quante volte la condizione Ci<Di si è verificata, come posso fare? Esiste una funzione excel oppure bisogna scrivere delle macro?

MarcoGG
21-07-2008, 09:53
E se invece devo confrontare i valori della colonna C con la colonna D?
Mi spiego meglio. Supponiamo che io voglia sapere nell'intervallo C1:C100 quante volte la condizione Ci<Di si è verificata, come posso fare? Esiste una funzione excel oppure bisogna scrivere delle macro?


Dim conta As Integer
conta = 0
Dim i As Integer
For i = 1 To 100
If Range("C" & i).Value < Range("D" & i).Value Then
conta = conta + 1
End If
Next i
MsgBox conta

;)

fracarro
21-07-2008, 11:25
Dim conta As Integer
conta = 0
Dim i As Integer
For i = 1 To 100
If Range("C" & i).Value < Range("D" & i).Value Then
conta = conta + 1
End If
Next i
MsgBox conta

;)

Grazie per l'aiuto. Ne deduco che non è possibile risolvere il problema con le funzioni standard di excel giusto? Ho però un problema. Come faccio funzionare questo codice? Ho provato a creare la funzione come descritto qui http://office.microsoft.com/it-it/excel/HA010548461040.aspx?pid=CH062528191040 ma non funziona, sai perchè?

Altra domanda. Date le colonne C e D di numeri, vorrei sapere quanti numeri di C non sono contenuti in D. Anche per questo ci vuole una macro?

MarcoGG
21-07-2008, 23:24
Grazie per l'aiuto. Ne deduco che non è possibile risolvere il problema con le funzioni standard di excel giusto? Ho però un problema. Come faccio funzionare questo codice? Ho provato a creare la funzione come descritto qui http://office.microsoft.com/it-it/excel/HA010548461040.aspx?pid=CH062528191040 ma non funziona, sai perchè?


Deduzione non corretta. Io non ho detto che non si possa fare con le semplici formule. Ho conosciuto gente che piuttosto che scrivere 2 righe di Visual Basic preferisce creare funzioni pazzesche, prolisse e illeggibili.
Io preferisco VBA.
Il mio codice precedente poteva essere ad esempio associato al Click di un pulsante ecc...
Se invece vuoi usare una Function, la devi PRIMA creare in un modulo, come avevo spiegato più sopra a Wertherino... Poniamo tu voglia mettere il risultato del conteggio in A1 :

Nel modulo :
Public Function FUNZIONE(arg As String) As Integer

Dim conta As Integer
conta = 0
Dim i As Integer
For i = 1 To 100
If Range("C" & i).Value < Range("D" & i).Value Then
conta = conta + 1
End If
Next i

FUNZIONE = conta

End Function

In A1 : =FUNZIONE("")


Altra domanda. Date le colonne C e D di numeri, vorrei sapere quanti numeri di C non sono contenuti in D. Anche per questo ci vuole una macro?


Si dovrebbe poter fare anche con le formule. Io lo farei con VBA...

fracarro
22-07-2008, 08:39
Deduzione non corretta. Io non ho detto che non si possa fare con le semplici formule. Ho conosciuto gente che piuttosto che scrivere 2 righe di Visual Basic preferisce creare funzioni pazzesche, prolisse e illeggibili.
Io preferisco VBA.
Il mio codice precedente poteva essere ad esempio associato al Click di un pulsante ecc...
Se invece vuoi usare una Function, la devi PRIMA creare in un modulo, come avevo spiegato più sopra a Wertherino... Poniamo tu voglia mettere il risultato del conteggio in A1 :

Nel modulo :
Public Function FUNZIONE(arg As String) As Integer

Dim conta As Integer
conta = 0
Dim i As Integer
For i = 1 To 100
If Range("C" & i).Value < Range("D" & i).Value Then
conta = conta + 1
End If
Next i

FUNZIONE = conta

End Function

In A1 : =FUNZIONE("")

Si dovrebbe poter fare anche con le formule. Io lo farei con VBA...

Ho seguito le tue istruzioni ma non funziona. Dopo aver creato la funzione, vado nel foglio di lavoro, inserisco =FUNZIONE("") e excel mi da l'errore #nome? come mai? Inoltre l'argomento dato in input arg dove viene usato nella funzione? Facendo riferimento anche alla funzione per Wertherino, si potrebbe modificare la mia per passarle in input le due colonne che mi interessano invece di fissarle nel codice? Grazie per l'aiuto, ma non ho mai programmato in VBA ne usato macro su excel (si vede?).

MarcoGG
22-07-2008, 14:04
Ho seguito le tue istruzioni ma non funziona. Dopo aver creato la funzione, vado nel foglio di lavoro, inserisco =FUNZIONE("") e excel mi da l'errore #nome? come mai? Inoltre l'argomento dato in input arg dove viene usato nella funzione? Facendo riferimento anche alla funzione per Wertherino, si potrebbe modificare la mia per passarle in input le due colonne che mi interessano invece di fissarle nel codice? Grazie per l'aiuto, ma non ho mai programmato in VBA ne usato macro su excel (si vede?).


Ti va in errore perchè usi una versione vecchia di Excel, che non accetta il parametro "", oppure non hai messo la Function come Public in un modulo...
Comunque passare il range come argomento si può fare benissimo :

Nel modulo :
Public Function FUNZIONEINT(intervallo As String) As Integer

Dim cella As Range
Dim conta As Integer
conta = 0
For Each cella In Range(intervallo)
If cella.Value < Cells(cella.Row, cella.Column + 1).Value Then
conta = conta + 1
End If
Next

FUNZIONEINT = conta

End Function

In A1: =FUNZIONEINT("C1:D100")

Se non ti funzia neanche questa hai seri problemi con il tuo Excel... ;)

fracarro
22-07-2008, 14:47
Ti va in errore perchè usi una versione vecchia di Excel, che non accetta il parametro "", oppure non hai messo la Function come Public in un modulo...
Comunque passare il range come argomento si può fare benissimo :

Nel modulo :
Public Function FUNZIONEINT(intervallo As String) As Integer

Dim cella As Range
Dim conta As Integer
conta = 0
For Each cella In Range(intervallo)
If cella.Value < Cells(cella.Row, cella.Column + 1).Value Then
conta = conta + 1
End If
Next

FUNZIONEINT = conta

End Function

In A1: =FUNZIONEINT("C1:D100")

Se non ti funzia neanche questa hai seri problemi con il tuo Excel... ;)

Grazie mille funziona tutto. Ho excel 2003. L'errore erano proprio le virgolette. Abituato con le funzioni standard non le mettevo vai. Visto che ti vedo ferrato in materia, c'è un modo per rendere questa funzione sempre disponibile tra quelle personalizzate in un qualunque foglio di excel? Attualmente credo che per ogni nuovo file devo ricreare il modulo.

MarcoGG
28-07-2008, 10:00
Grazie mille funziona tutto. Ho excel 2003. L'errore erano proprio le virgolette. Abituato con le funzioni standard non le mettevo vai. Visto che ti vedo ferrato in materia, c'è un modo per rendere questa funzione sempre disponibile tra quelle personalizzate in un qualunque foglio di excel? Attualmente credo che per ogni nuovo file devo ricreare il modulo.


Beh, fare un semplice copia/incolla di qualche funzioncina non lo vedo proprio un gran sbattimento. Inoltre io consiglio sempre di mantenere macro, sub e funzioni all'interno dello stesso Workbook che ne deve fare uso.
Per rispondere alla tua domanda, sì, metodi ce ne sono. Un metodo ad esempio è quello di creare un file .XLA che contiene tutte le funzioni desiderate e renderlo visibile a tutti i files Excel interessati... Ma bisogna rispettare certe condizioni "rigide" e comunque dovresti sempre modificare uno a uno i files che ne devono fare uso, specificando DOVE e COME reperire le funzioni esterne...
Modifica per modifica, molto meglio e più sicuro che ogni Workbook contenga tutto il codice di cui ha bisogno. ;)

fracarro
28-07-2008, 10:11
Beh, fare un semplice copia/incolla di qualche funzioncina non lo vedo proprio un gran sbattimento. Inoltre io consiglio sempre di mantenere macro, sub e funzioni all'interno dello stesso Workbook che ne deve fare uso.
Per rispondere alla tua domanda, sì, metodi ce ne sono. Un metodo ad esempio è quello di creare un file .XLA che contiene tutte le funzioni desiderate e renderlo visibile a tutti i files Excel interessati... Ma bisogna rispettare certe condizioni "rigide" e comunque dovresti sempre modificare uno a uno i files che ne devono fare uso, specificando DOVE e COME reperire le funzioni esterne...
Modifica per modifica, molto meglio e più sicuro che ogni Workbook contenga tutto il codice di cui ha bisogno. ;)

Ok grazie mille. Faccio come mi consigli per evitare sbattimenti.

ses4
02-08-2008, 20:39
Ne deduco che non è possibile risolvere il problema con le funzioni standard di excel giusto?

Come ti ha già risposto MarcoGG la deduzione non è corretta, se preferisci le funzioni al VBA prova con:
quesito 1
=CONTA.SE(C8:C26;">=30")-CONTA.SE(C8:C26;">45")
oppure
=MATR.SOMMA.PRODOTTO((C8:C26>=30)*(C8:C26<=45))

quesito 2
=MATR.SOMMA.PRODOTTO(1*(C8:C26<D8: D26))


Altra domanda. Date le colonne C e D di numeri, vorrei sapere quanti numeri di C non sono contenuti in D. Anche per questo ci vuole una macro?
Non necessariamente:
=MATR.SOMMA.PRODOTTO(1*(CONTA.SE(D8: D26;C8:C26)=0))

N.B. ho dovuto inserire uno spazio tra : e D altrimenti sarebbe comparsa la faccina :D

Spero di non aver scritto troppe fesserie, sono un po' arrugginito.
Ciao

fracarro
09-08-2008, 13:40
Come ti ha già risposto MarcoGG la deduzione non è corretta, se preferisci le funzioni al VBA prova con:
quesito 1
=CONTA.SE(C8:C26;">=30")-CONTA.SE(C8:C26;">45")
oppure
=MATR.SOMMA.PRODOTTO((C8:C26>=30)*(C8:C26<=45))

quesito 2
=MATR.SOMMA.PRODOTTO(1*(C8:C26<D8: D26))


Non necessariamente:
=MATR.SOMMA.PRODOTTO(1*(CONTA.SE(D8: D26;C8:C26)=0))

N.B. ho dovuto inserire uno spazio tra : e D altrimenti sarebbe comparsa la faccina :D

Spero di non aver scritto troppe fesserie, sono un po' arrugginito.
Ciao

Perfetto.
Entrambe le funzioni eseguono egregiamente il loro compito.
Nonostante l'help dell'excel sulla funzione MATR.SOMMA.PRODOTTO non mi è tanto chiaro come lavorano le tue funzioni: =MATR.SOMMA.PRODOTTO(1*(C8:C26<D8: D26)) e
=MATR.SOMMA.PRODOTTO(1*(CONTA.SE(D8: D26;C8:C26)=0))
ma l'importante è che funzionino.
Grazie mille ses4.