Contar celdas que un tengan un color específico

Inicio VBA Contar celdas que un tengan un color específico

Este debate contiene 2 respuestas, tiene 2 mensajes y lo actualizó vichopalacios vichopalacios hace 3 meses.

Viendo 3 publicaciones - del 1 al 3 (de un total de 3)
  • Autor
    Publicaciones

  • omihijo
    Participant

    Buenas y gracias de antemano por la ayuda. Necesito que una macro me busque si en la columna “B” hay 2 o más celdas de un color específico y, en caso afirmativo, muestre un msgbox “repetido”. Esto es lo que hago y en “B:B” dice “error de tipos”

    Sub Macro1()

    ‘ Macro1 Macro

    Dim Rojo As Variant

    Rojo = Application.WorksheetFunction.CountIf(“b:b”, Interior.Color = 255).Count

    If Rojo > 1 Then
    MsgBox “Hay números de lista repetidos”
    End If

    End Sub

    vichopalacios
    vichopalacios
    Moderator

    Hola omihijo

    Primeramente debes recordar que cuando usasen VBA: “Application.WorksheetFunction.” junto a cualquier función regular de Excel, los argumentos que pongas en su interior deben cumplir con lo requerido al usar esa función en la página.
    En tu caso “interior.color” no es un argumento válido y siempre te dará error.

    En segundo lugar la sintaxis correcta de tu línea sería algo como la que te propongo abajo, en ella he cambiado la condición inaceptable del color por una cualquiera de valor.
    1.  Rojo = WorksheetFunction.CountIf(Worksheets("Hoja1").Range("B:B"), ">0")

    Saludos

    vichopalacios
    vichopalacios
    Moderator

    Quizás te interese analizar una alternativa en la que recorres todo el rango con datos en la columna B.
    A modo de ejemplo he definido el rango numéricamente para las primeras 100 filas, tú lo puedes variar o automatizarlo utilizando el concepto de “última fila”,
    No recomiendo analizar toda la columna porque se demora mucho.

     Code: arbitrary (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.

    Sub Contador()
        Dim CuentaColor As Double
        Dim CeldaColor As Long
        Dim miRango As Range
        Dim Celda As Range

        CeldaColor = 255
        Set miRango = ActiveSheet.Range("B1:B100")
        For Each Celda In miRango
            If Celda.Interior.Color = CeldaColor Then
                CuentaColor = CuentaColor + 1
            End If
        Next Celda
        If CuentaColor > 1 Then
            MsgBox "Hay " & CuentaColor & " números de lista repetidos"
        End If
    End Sub

Viendo 3 publicaciones - del 1 al 3 (de un total de 3)

Debes estar registrado para responder a este debate.