Estructura de función COUNTIF en VBA

Para Dante Amor.

Buenos días Dante tengo una hoja con fórmulas y estoy intentando hacerla en VBA pero no me sale y espero me puedas ayudar a resolverlo. Mi formula es la siguiente =IF(B5="Colocar Tienda","",IF(B5="Sucursal Norte",COUNTIF(AW1:AW50,11),IF(B5="Sucursal Poniente",COUNTIF(AX1:AX50,11),IF(B5="Sucursal Oriente",COUNTIF(AY1:AY50,11),COUNTIF(AZ1:AZ50,11)))))

Esta fórmula la tengo en una matriz de 6 columnas y 6 renglones, por ejemplo 11 sería el renglón 1 con la columna A y así sucesivamente, esto es para dar un estatus de ventas. Espero haberme epxlicado y me puedas ayudar a plasmarlo en VBA.

2 respuestas

Respuesta
1

No entendí muy bien tu ejemplo. Tampoco puedo saber en cuál celda quieres el resultado.

En VBA podría ser así:

Sub Contar()
'Por.Dante Amor
    '
    Select Case Range("B5")
        Case "Colocar Tienda": res = ""
        Case "Sucursal Norte": res = WorksheetFunction.CountIf(Range("AW1:AW50"), 11)
        Case "Sucursal Poniente": res = WorksheetFunction.CountIf(Range("AX1:AX50"), 11)
        Case "Sucursal Oriente": res = WorksheetFunction.CountIf(Range("AY1:AY50"), 11)
        Case Else: res = WorksheetFunction.CountIf(Range("AZ1:AZ50"), 11)
    End Select
    MsgBox "Resultado : " & res
End Sub

Otra opción es, si quieres la fórmula en la celda B6

Sub contar2()
'Por.Dante Amor
    With Range("B6")
        .FormulaR1C1 = _
            "=IF(R[-1]C=""Colocar Tienda"","""",IF(R[-1]C=""Sucursal Norte"",COUNTIF(R[-5]C[47]:R[44]C[47],11),IF(R[-1]C=""Sucursal Poniente"",COUNTIF(R[-5]C[48]:R[44]C[48],11),IF(R[-1]C=""Sucursal Oriente"",COUNTIF(R[-5]C[49]:R[44]C[49],11),COUNTIF(R[-5]C[50]:R[44]C[50],11)))))"
    End With
End Sub

Pero esta macro depende de la celda donde quieres poner la fórmula. Si ejecutas la macro, en la celda B6 te va a poner la fórmula. Pero si la celda va en otra celda, se tiene que corregir la macro.

Envíame una imagen donde se vean tus datos

O envíame tu archivo para adaptar la macro

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Jair Abelardo Bustamante Moreno


.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Va la macro

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("I1")) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Range("B3:G8") = ""
        If Target.Value = "" Then Exit Sub
        '
        For i = 3 To 8  'ciclo de filas
            For j = Columns("B").Column To Columns("G").Column 'ciclo columnas
                num = Val(Cells(i, 1) & Cells(2, j))    'coordenadas de la matriz
                res = 0
                'busca el dato en la columna N
                Set b = Columns("N").Find(Target.Value, lookat:=xlWhole)
                If Not b Is Nothing Then
                    'obtiene la fila solamente para saber en cuál columna debe contar
                    'ej, si es "sucursal norte", la fila es la 2, entonces
                    'a la columna H le suma 2 columnas, significa que va a contar en la columna J
                    'si fuera "poniente" a H le suma 3 columnas, entonces busca en K
                    fila = b.Row
                    col = Columns("H").Column + fila
                    res = WorksheetFunction.CountIf(Columns(col), num)
                End If
                Cells(i, j) = res
            Next
        Next
        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End If
End Sub

sal u dos

¡Gracias! 

Te agradezco mucho el apoyo como cultura general tengo una pequeña duda que significa la sentencia "num = Val(Cells(i, 1) & Cells(2, j))    'coordenadas de la matriz" no logro visualizar o entender dentro de la matriz a que punto se refiere o a que paso.

En la matriz en el encabezado tienes 1 2 3 4 5 6 y en el lado izquierdo tienes 6 5 4 3 2 1

Entonces en "num" realiza los pares, 61 62 63 64 65 66, 51 52 53 54 55 56, etc

Respuesta
1

A la excelente respuesta, te aportó algo que quizás ayude

https://youtu.be/GhpxZWwLhyc

https://youtu.be/d4VgP82naPI

En vez de usar sum ifs usa countifs

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas