Formular código para creada en vba función

Buenas tardes expertos necesito crear un código en vba para una función

Tengo esto como el inicio de la función

Public Function CASO_ACTIVIDADES(actividades As Object, subactividades As Integer, casilla_anterior As Object)

Y nesecito que me haga lo siguente

Lo primero es:

Lo que necesito es que me busque el ultimo dato de un rango variable

Dicho rango comienza desde la celda b5 y termina en la fila que se encuenta la función en la misma celda b

En este rango hay varias celdas vacías ( una idea es que pueda buscar el primer dato de abajo hacia arriba), esto debe ser una variable ejemplo "var1"

Lo segundo es:

Me busque en dato de la celda "subactividades" en la columna "C" de la Hoja ("ACT" & var1) y me devuelva el dato que se encuentra en la columna "D" ( esto puede ser como lo que hace la función buscarV)

Si el dato de la celda "subactividades" no se encuentra me devuelva "no se encuentra"

Muchas gracias toda la ayuda

Saludos

1 respuesta

Respuesta
1

Esta parte no me queda clara: "Dicho rango comienza desde la celda b5 y termina en la fila que se encuenta la función en la misma celda b"

¿Qué dato necesitas? ¿El último de la columna B?

Para lo segundo: ¿Qué vas a pasar como parámetro en subactividades? ¿Por la declaración de la variable vas a pasar un número?

"Me busque en dato de la celda "subactividades" en la columna "C" de la Hoja ("ACT" & var1) y me devuelva el dato que se encuentra en la columna "D""

Puedes explicar con un ejemplo: ¿Qué datos vas a poner en la función y qué esperas como resultado?

¿Puedo poner cualquier código para traer el dato que quieres o tiene que ser con algún código específico?

hola dante gracias por la ayuda

mira tengo esto en la hoja

donde el codigo de la funcion comienza asi y la condicion que necesito es esta:

Public Function CASO_ACTIVIDADES(actividades As Object, subactividades As Integer, casilla_anterior As Object)
If subactividades <> 0 Then

lo primero que debe de hacer es buscar la actividad (columna B) superior mas proxima, en el caso del ejemplo seria el  numero 2 ( para el ejemplo la busqueda debe hacerse en el rango ("b5: "b"& celda activa) )
El dato anterior se debe guarda como variable porque es nombre de una hoja

Ahora bien

necesito que me busque el dato de la celda "c11" en la columna "c:c" de la hoja con el nombre ("ACT" & variable) ----- la variable fue anteriormente guardada;

si el dato existe que me devuelva el dato de la columna  a la derecha

y si No lo encuenta, que me devuelva "no se encuentra"

Nota: este ultimo procedimiento es como buscarV

te adjunto como se veria en formula directamente desde excel

=SI.ERROR(SI($C7<>"";BUSCARV(C7;(INDIRECTO("'ACT"&BUSCAR(10000;$B$5:B7)&"'!C1:D500"));2;0));"NO SE ENCUENTRA")

Espero haber explicado mejor

Muchas gracias dante

Ya entendí, quieres que tu función ponga el nombre de la actividad y también te ponga el nombre de la subactividad, tomando como base los datos de las celdas B y C.

El nombre de la actividad se encuentra en la celda A1 de cada hoja y el nombre de la subactividad se encuentra en la columna D según la hoja y el número de subactividad.

Todavía no entiendo para qué es el parámetro "casilla anterior"

Los parámetros actividades y suactividades los vamos a poner tipo Range.

Public Function CASO_ACTIVIDADES(actividades As Range, subactividades As Range)
'Por.DAM
    existe = False
    If actividades.Value <> "" Then
        hoja = "act" & actividades.Value
        For Each h In Sheets
            If UCase(h.Name) = UCase(hoja) Then existe = True: Exit For
        Next
        If existe Then
            CASO_ACTIVIDADES = Sheets(hoja).Range("A1")
        Else
            CASO_ACTIVIDADES = "La hoja : " & hoja & " no existe"
        End If
    Else
        hoja = "act" & Range("B" & subactividades.Row).End(xlUp)
        For Each h In Sheets
            If UCase(h.Name) = UCase(hoja) Then existe = True: Exit For
        Next
        If existe Then
            Set b = Sheets(hoja).Range("C:C").Find(subactividades.Value)
            If Not b Is Nothing Then
                CASO_ACTIVIDADES = Sheets(hoja).Cells(b.Row, "D")
            Else
                CASO_ACTIVIDADES = "El dato no se encuentra"
            End If
        Else
            CASO_ACTIVIDADES = "La hoja no existe"
        End If
    End If
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas