Contar.SI en VBA Excel, elementos que se encuentran en otra Hoja.

Quiero colocar en la Hoja1, los valores resultantes de CONTAR elementos que se encuentran en la Hoja2, utilizando la Función CONTAR. SI en VBA, he utilizado este ejemplo, pero no me funciona:

ActiveSheet.Range("M3") = Application.WorksheetFunction.CountIfs(Sheets("ArchPlano").Range("G2:G2500"), Sheets("ArchPlano").Range("N1"))

Los elementos a a contar, están en la Columna DE de la Hoja1 y quiero saber cuantas veces aparecen en la Hoja2. En la Hoja 2, están en la Columna G.

Estos valores buscados pueden ir de D2 hasta D2500.

1 respuesta

Respuesta
1

Tu macro está bien. Revisa que en la celda "N1" de la hoja "ArchPlano" tengas el dato que quieras contar.

Gracias, mira ya me fije en el dato de "N1", pero ahora me sale este problema, me copia la cantidad en todo el rango del For I= 2 TYo 1000, sin tener en cuenta que debe cambiar de elemento a Buscar. Mira esta macro es la que estoy usando:

For i = 2 To 2500
ActiveSheet.Range("H" & i) = Application.WorksheetFunction.CountIfs(Sheets("Plano").Range("G2:G2500"), Sheets("Boletines").Range("D2"))
Next

Quieres que también cambié la fila de la columna "D", entonces es así:

For i = 2 To 2500
ActiveSheet.Range("H" & i) = Application.CountIfs(Sheets("Plano").Range("G2:G2500"), Sheets("Boletines").Range("D" & i))
Next

Gracias Dante, funciona de maravilla, pero me presenta esta novedad.

Me coloca ceros en todo el rango dela variable y por ende la funcion me lo toma como "No Vacio" y escribe "SI".

Necesito que se detenga de escribir, si por ejemplo hay valores a buscar solo hasta en la fila 200, que ahí pare, y que si el valor buscado, es "Cero", que deje la celda del Rago "H" vacias, para que no me escriba en en G.

Necesito hacerle esa pequeña correcion a esta macro que estoy intentando adaptar:

    For i = 2 To 2500
        ActiveSheet.Range("H" & i) = Application.CountIfs(Sheets("Plano").Range("G2:G2500"), Sheets("Boletines").Range("D" & i))
        If Sheets("Plano").Range("H" & i) = 0 Then
            Range("G" & i) = ""
        End If
    Next

Prueba así

    Set h1 = ActiveSheet
    Set h2 = Sheets("Plano")
    Set h3 = Sheets("Boletines")
    u2 = h2.Range("D" & Rows.Count).End(xlUp).Row
    u3 = h3.Range("D" & Rows.Count).End(xlUp).Row
    For i = 2 To u3
        h1.Range("H" & i) = Application.CountIfs(h2.Range("G2:G" & u2), h3.Range("D" & i))
    Next

Gracias Dante, mejor te muestro esta imagen haber si viendo lo que deseo hacer, me hago entende mejor:

La idea es que si el # de Boletin buscado, tiene valores, entonces me cuenta la cantidad de veces que aparece y que a la vez, en G, me coloque la palabra "SI". En caso en que el boletin no tenga valores, es decir, que se haya encontrado cero veces, entonces deje las celdas en H Vacias y en G no me escriba nada, me deje la celda que vacía.

También, que detecte hasta donde hay # de boletines, para evitar, que me coloque "0" en todo el rango de For.

Mejor envíame tu archivo y me explicas nuevamente.

Listo Dante, ya te lo envié con una explicación.

Esta es la macro. Si no quieres que se rellene hasta 2500, no pongas en el for to 2500, busca la forma de encontrar la última fila y entonces que la macro haga el ciclo hasta esa fila.

Public Sub Comprobar()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Boletines")
    Set h2 = Sheets("Plano")
    u1 = h1.Range("D" & Rows.Count).End(xlUp).Row
    u2 = h2.Range("G" & Rows.Count).End(xlUp).Row
    h1.Range("G2:H" & u1).ClearContents
    For i = 2 To u1
        cuenta = Application.CountIf(h2.Range("G2:G" & u2), h1.Range("D" & i))
        If cuenta > 0 Then
            h1.Range("H" & i) = cuenta
            h1.Range("G" & i) = "SI"
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Saludos. Dante Amor

No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas