Funciones Esnod y COINCIDIR en vba

En una hoja tengo esta fórmula en la celda E149

SI(ESNOD(COINCIDIR(F149;DESCANSOS;0));D149+$E$2+F149;"")

F149=18:00

D149=13/04/2017

E2=8:00

Descansos hace referencia a una tabla en la que tengo valores como Descanso, Permiso, entre otros.

La fórmula en la hoja funciona correctamente pero necesito pasarla a código para que al ejecutar la macro me ingrese el valor automáticamente ya que al tener una fórmula en esta celda y realizar otro cálculo con esta, me altera el resultado.

Respuesta
4

Encendé la grabadora de macros (está en el menú Macros o con el botoncito al pie de la hoja)

Seleccioná la celda con la fórmula desde la barra de fórmulas y dale enter.

Detené la grabadora. En un módulo del Editor tendrás el código.

La referencia estará dada por la ubicación de la celda elegida. Si luego necesitas que la ajuste para otras celdas más dejámela escrita aquí con todas las aclaraciones.

Sdos.

Elsa

http://aplicaexce.galeon.com/macros.htm

Muchas gracias. La ajusté de este modo: 

If IsNA(Match(h3.Cells(6, "F"), Descansos, 0)) Then
                    h3.Cells(6, "E") = (h3.Cells(6, "D")) + (h3.Cells(2, "E")) + (h3.Cells(6, "F"))
                    Else: h3.Cells(6, "E") = ""
                End If

Pero en Match me sale error (No se ha definido Sub o Function).

Dejame escrita la macro de la grabadora... las funciones no se llaman así nomás sino que requiere de algunas instrucciones más. Necesitaré la macro de la grabadora.

Sdos!

Sub CalcFecFin()
'
' CalcFecFin Macro
'
'
    Range("E376").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ISNA(MATCH(RC[1],DESCANSOS,0)),RC[-1]+R2C5+RC[1],"""")"
    Range("E377").Select
End Sub

Esta es la macro de la grabadora.

Viendo la fórmula y viendo tu código ajustado entiendo que en realidad no necesitas dejar la fórmula sino el resultado, ¿es correcto?

O sea que solo necesitas ver si F6 se encuentra en la tabla DESCANSOS... y en ese caso colocar el resultado de un cálculo en E6.

Si esto es lo que intentas obtener la macro no necesita las fórmulas, sino que podés resolverlo con una búsqueda del tipo:

dato = [F6]

Set busco = Activesheet.Range(Descansos).find(dato, lookin:=xlvalues, lookat:=xlwhole)

if not busco is nothing then 

'linea con el cálculo

h3.Cells(6, "E") = (h3.Cells(6, "D")) + (h3.Cells(2, "E")) + (h3.Cells(6, "F"))

else

h3.Cells(6, "E") = ""

end if

Esto es solo la idea, tenés que ajustar nombre de hoja y rango seguramente. Cualquier dificultad dejame la macro tal como te ha quedado.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas