2012-01-04 24 views
7

devo contare il numero di celle in una colonna che contiene un valore specifico. Attualmente sto usando il seguente codice:Countif Con multipla o criteri

iVal = Application.WorksheetFunction.COUNTIF(Range("A:A"), "SAL")

Tuttavia, ora ho bisogno di contare quante cellule contiene né

  • SAL, o
  • PRE
+0

perché non una semplice seconda linea 'iVal2 = Application.WorksheetFunction.COUNTIF (Range ("A: A"), "PRE")' e quindi aggiungere (o entrambi) segnalare variabili come un totale? – brettdj

+0

Perché ho intenzione di aggiungere fino a circa 20 variabili e farlo per circa 30 colonne diverse, quindi ridurrò molto lavoro se riuscirò a mettere tutto in un'unica riga! – BradStevenson

+1

Che ne dici di leggere i valori della colonna in una matrice? Quindi è possibile loop, aggiungere condizioni e così via? – JimmyPena

risposta

7

Il modo più rapido sarebbe quello di fare 2 COUNTIF:

iVal = Application.WorksheetFunction.CountIf(Range("A:A"), "SAL") + Application.WorksheetFunction.CountIf(Range("A:A"), "PRE") 
+0

+1, questo è l'approccio migliore in quanto il CountIf può accettare solo un parametro. –

+1

Funziona alla grande, ma a lungo andare mi ritroverò con un sacco di variabili, quindi cerco di trovare un metodo più efficiente, ottimo metodo intermedio! – BradStevenson

+0

@MattDonnan in realtà è possibile alimentare COUNTIF più di un test, vedi sopra. – brettdj

18

È possibile utilizzare il VBA equivalente di una formula COUNTIF standard (che può richiedere più di un argomento). Questo può essere ampliato come richiesto

Formula standard
=SUM(COUNTIF(A:A, {"SAL","PRE"}))

VBA Equivalente
MsgBox Evaluate("Sum(COUNTIF(A:A,{""PRE"",""SAL""}))")

+1

+1 Di gran lunga la migliore risposta finora! Potrebbe pagare per aggiungere l'opzione VBA per passare un array di stringhe 'MsgBox Evaluate (" Sum (COUNTIF (A: A, {"" "& Join (v," "", "" "& &" ""})) ") ' –

+0

@chrisneilsen thx - e ottimo suggerimento sull'array di stringhe. – brettdj

2

Perchè non si utilizza la funzione CountIfs?

Esempio:

Application.CountIfs(CR1_range, V_1, CR2_range, V_2, CR3_range, V_3, CR4_range, V_4) 

Dove CR1_range è, ovviamente, la vostra gamma e V_1 è la variabile

Edit: Ops! Appena visto che essa deve essere una dichiarazione O, la mia risposta sarebbe lavorano solo per un'istruzione AND (non cancellare per riferimento in caso qualcuno è interessato)

0

In seguito ha funzionato bene per me: -

Dim val1 as string, val2 as string 

val1 = "value1" 
val2 = "value2"  

count = Application.WorksheetFunction.CountIfs(ThisWorkbook.Names("firstname").RefersToRange, val1 , ThisWorkbook.Names("secondname").RefersToRange, val2) 

Questo Gli aiuti webpage riguardano i Named Ranges in Excel.