Adaptar formula a Userform VBA Excel para buscar valores entre rango de fechas

Tengo un código que me ha dado dolores de cabeza todo este dia por no poder encontrar el código correcto y hacer funcionar la finalidad de mi userform, la formula que quiero adaptar es la siguiente:

=CONTAR.SI.CONJUNTO(C2:C200,AP12,P2:P200,AP11,D2:D200,">=" &AP8, D2:D200, "<="&AP9)

Este código funciona bien en la hoja de Excel pero en en vb no logro adaptarlo, tengo lo siguiente:

lbl_p3 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & final), Sreal, Worksheets("DATOS").Range("c2:c" & final), Nombres, Worksheets("DATOS").Range("d2:d" & final), fecha1, fecha2)

1 respuesta

Respuesta
1

Una manera de obtener el resultado de una fórmula es encender la grabadora de macros, seleccionar la celda que ya tiene la fórmula, colocar el cursor en la barra de fórmula y dar Enter.

Detené la grabadora y en un módulo tendrás algo como esto:

ActiveCell.FormulaR1C1 = _
"=COUNTIFS(RC[-6]:R[198]C[-6],R[10]C[33],RC[7]:R[198]C[7],R[-1]C[33],RC[-5]:R[198]C[-5],"">="" &R[6]C[33], RC[-5]:R[198]C[-5], ""<=""&R[7]C[33])"

Esto no es lo que necesitas, pero te servirá para revisar cómo estás escribiendo los argumentos que verás están separados con comas, en especial aquellos que tienen los signos ><.

Por ej: tu primer argumento debe indicar el rango C2:C200 pero en tu macro estás indicando P

Correcto muchas gracias Elsa por tu ayuda, ya lo hice así y colo todos los datos adaptados a los textbox del Userform pero al ejecutarla me dice que no coinciden los tipos.

Tendrás que ir evaluando cada variable a ver si tienen valores válidos... final, Sreal, Nombres, fechas...

Al momento del aviso o al depurarlo pasá el mouse por las variables para observar su contenido y cuál falla, quizás la variable 'final' esté vacía o 'Sreal' no es un rango y así... desde aquí no puedo resolverlo.

Sdos.

Elsa

http://aplicaexcel.galeon.com/manual_500Mac.htm 

Muchas gracias, eh revisado todas las variables con el mouse como me indica usted y si me aparece información, le muestro mi código para ver si me puede ayudar a detectar mi error por favor:

Private Sub btn_Buscar_Click()

Dim i As Double
Dim final As Double
Dim fechal As String

    final = Application.CountA(Worksheets("DATOS").Range("tecasig"))
    fechal = Application.CountA(Worksheets("DATOS").Range("fechar"))
For i = 2 To final
    nombres = Worksheets("DATOS").Cells(i, 3).Value
    sreal = Worksheets("DATOS").Cells(i, 16).Value
    fechar = Worksheets("DATOS").Cells(i, 4).Value

Dim fecha1 As String
Dim fecha2 As String
fecha1 = txtFecha1
fecha2 = txtFecha2
fecha1 = Format(fecha1, "dd/mm/yyyy")
fecha2 = Format(fecha2, "dd/mm/yyyy")
        'Esta seccion representa los Preventivos por TECNICO
        If nombres = lbl_tec3 _
        And sreal = "PREVENTIVO" Then
        lbl_p3 = Application.CountIfs(Worksheets("DATOS").Range("c2:c" & final), nombres, Worksheets("DATOS").Range("p2:p1000" & final), sreal, "" >= "" & fecha1, Worksheets("DATOS").Range("d2:d1000" & fechal), "" <= "" & fecha2)
        End If
        Next
End Sub

El primer error que veo está en este párrafo, parece que 1000 está demás:

Range("p2:p1000" & final)

Lo mismo revisa aquí donde además la variable no creo que deba ser fechal

Range("d2:d1000" & fechal),

Sdos!

Con el código actualizado:

lbl_p3 = Application.WorksheetFunction.CountIfs(Sheets("DATOS").Range("c2:c" & final), nombres, Sheets("DATOS").Range("p2:p" & final), sreal, Sheets("DATOS").Range(final), "" >= "" & fecha1, Sheets("DATOS").Range(final), "" <= "" & fecha2)

me sigue saliendo:

Es que programar no es copiar y pegar códigos encontrados por allí... para trabajar como programadores se estudia como cualquier otra profesión.

Veamos: si 'final' es una variable numérica que te indica la última fila de un rango (Range("p2:p" & final)... no podés llamar a un rango solo con un número:

Sheets("DATOS").¿Range(final)?

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas