2012-01-04 8 views
7

Necesito contar el número de celdas en una columna que contienen un valor específico. Actualmente estoy usando el siguiente código:Countif With Multiple OR Criteria

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

Sin embargo, ahora la necesidad de contar cuántas células contienen ya sea

  • SAL, o
  • PRE
+0

¿por qué no una segunda línea simple 'iVal2 = Application.WorksheetFunction.COUNTIF (Rango (" A: A ")," PRE ")' y luego agregue (o reporte ambas) variables como un total? – brettdj

+0

Porque voy a agregar alrededor de 20 variables y hacer esto para alrededor de 30 columnas diferentes, así que reduciré mucho trabajo si puedo obtener todo en una sola línea. – BradStevenson

+1

¿Qué hay de leer los valores de la columna en una matriz? Entonces puedes repetir, agregar condiciones, etc. – JimmyPena

Respuesta

7

La manera más rápida sería hacer 2 COUNTIFs:

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

+1, este es su mejor enfoque ya que CountIf solo puede aceptar un parámetro. –

+1

Esto funciona muy bien, pero a la larga acabaré teniendo muchas variables, así que trato de encontrar un método más eficiente, ¡aunque sea un gran método intermedio! – BradStevenson

+0

@MattDonnan es posible alimentar CONDUCIR más de una prueba, ver arriba. – brettdj

18

Se podría utilizar el VBA equivalente a una fórmula estándar de CONTAR.SI (que puede tomar más de un argumento). Esto se puede ampliar según sea necesario

Fórmula Estándar
=SUM(COUNTIF(A:A, {"SAL","PRE"}))

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

+1

+1 ¡Lejos y lejos la mejor respuesta hasta ahora! Podría pagar para agregar la opción VBA para pasar una serie de cadenas 'MsgBox Evaluate (" Sum (COUNTIF (A: A, {"" "& Join (v," "", "" ") y" ""})) ") ' –

+0

@chrisneilsen thx - y excelente sugerencia en la matriz de cadenas. – brettdj

2

¿Por qué no utilizar la función CountIfs?

Ejemplo:

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

Dónde CR1_range es, obviamente, su alcance y V_1 es la variable de

Edición: Lamentablemente! Sólo se ve que debe ser una declaración o, mi respuesta sólo funciona para una instrucción AND (no eliminar como referencia en caso que a alguien le interesa)

0

Siguiendo funcionado bien para mí: -

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) 

Este webpage ayuda con respecto a rangos con nombre en Excel.

Cuestiones relacionadas