Equivalente en VBA para las siguientes funciones de condición

Estimada red de profesionales en este tema del VBA en excel y Macros, necesito de vuestra ayuda para poder escribir las sentencias equivalentes en VBA para las siguientes funciones que se encuentran en una celda:

=SI(ESNUMERO(B4);SI((B4)>$H$3;"PROXIMO A VENCER"; "VENCIDO");"")

 =SI(B4<>"";B4-$H$3;"")

¿Es posible realizar el código VBA para que tome en cuenta valores de las celdas que pertenecen a una columna? Por ejemplo para las celdas de la columna B4 a B67...

Por favor, ayúdenme con esto que me tiene mallllllll

3 Respuestas

Respuesta
3

La forma de poner fórmulas en VBA es como sigue, con respecto a lo que comenta de un rango variable para las columnas esto se logra contando las filas y luego integrándolas al rango, las dos ultimas líneas hacen eso sin necesidad de ciclos do while.

Sub base()
Range("b2").Formula = "=If((B4)>$H$3," & """" & "PROXIMO A VENCER" & """" & "," & """" & "VENCIDO" & """" & ")"
Range("b3").Formula = "=if(b4<>" & """" & "" & """" & ",b4-$h$3," & """" & "" & """" & ")"
ultima_fila = Range("b2").CurrentRegion.Rows.Count
Range("b2:b" & ultima_fila + 1).Select
End Sub

Muchas gracias James Bond, me encantaria entender lo que expresas pero como lo hago extensivo cuando produzca un cmabio en las fechas de vencimiento???? (es decir modificando las fechas de las celdas para la columna B4 a B67.

Es decir sino hay fecha que no haga nada, pero si pongo o cambio la fecha vencimiento que recién ahí haga las evaluaciones en las columnas D4:D67 & E4:67 & F4:F67 & G4:G67.....

Te coloco la imagen de lo que estoy haciendo asi soy mas claro....

ademas se puede hacer parpadear las columnas F4:F67 & G4:G67 si verifican un valor de dias menores a 30 para el vencimiento??????????

Perdon pero soy de madera con esto........

AGRADECIDO POR TU TIEMPO

Este es el resultado de las dos macros una es para poner la fórmula y la otra para colorear

estas son las macros

Sub realizar_evaluaciones()
Set datos = Range("a1").CurrentRegion
With datos
    f = .Rows.Count: c = .Columns.Count
    Set datos = Range("d4").Resize(f - 2, 4)
    parte = "and(b4<>" & """" & "" & """" & ",c4<>" & """" & "" & """" & ")"
    parte2 = "If((B4)>$H$3," & """" & "PROXIMO A VENCER" & """" & "," & """" & "VENCIDO" & """" & ")"
    parte3 = "If((c4)>$H$3," & """" & "PROXIMO A VENCER" & """" & "," & """" & "VENCIDO" & """" & ")"
    .Columns(1).Formula = "=if(" & parte & "," & parte2 & "," & """" & "" & """" & ")"
    .Columns(2).Formula = "=if(" & parte & "," & parte3 & "," & """" & "" & """" & ")"
    .Columns(3).Formula = "=if(b4<>" & """" & "" & """" & ",b4-$h$3," & """" & "" & """" & ")"
    .Columns(4).Formula = "=if(c4<>" & """" & "" & """" & ",c4-$h$3," & """" & "" & """" & ")"
End With
End Sub
Sub colorear()
Set datos = Range("a1").CurrentRegion
With datos
    f = .Rows.Count
    Set datos = Range("f4").Resize(f - 2, 2)
    For i = 1 To f
        v1 = .Cells(i, 1): v2 = .Cells(i, 2)
        If v1 <= 30 Then .Cells(i, 1).Interior.ColorIndex = 3
        If v2 <= 30 Then .Cells(i, 2).Interior.ColorIndex = 3
    Next i
End With
End Sub
Respuesta
3

Ejecuta la siguiente macro

Sub Macro3()
'
' Por.Dante Amor
'
    u = Range("A" & Rows.Count).End(xlUp).Row
    Range("D4:E" & u).FormulaR1C1 = "=IF(ISNUMBER(RC[-2]),IF((RC[-2])>R3C8,""PROXIMO A VENCER"", ""VENCIDO""),"""")"
    Range("F4:G" & u).FormulaR1C1 = "=IF(RC[-4]<>"""",RC[-4]-R3C8,"""")"
End Sub

.

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

.

Avísame cualquier duda

.

Respuesta
1

Podría subir un ejemplo de lo que requiere para poder ayudarle, ya que no me queda bien claro.

Antes que nada muchas gracias por responder Víctor, si como no pero primero dejo una imagen de lo que tengo y explico

En las columnas estados de VTV y estados de BV, están escritas las funciones de condición que hacen que con el dato de la columnas de fecha de vencimiento VTV y de BV evalúe las fechas y ponga próximo a vencer o vencido para caso. Ahora bien lo que quiero es una macro que la fórmula no sea vea (con esto evito que la puedan borrar) pero que haga lo mismo que puse al iniciar la pregunta.

También pensaba en hace con colores parpadeantes en rojo si las celdas de las columnas donde se indican los días vencidos o por vencer son menores a los 30 días... estoy complicado porque se muy poco de esto pero me gusta mucho el tema... voy a tener que pagarme un curso...

Te agradezco la ayuda

El código que compartió James Bond es correcto

Le envío un archivo adaptado a su ejemplo, nada más hay que copiar el codigo para las otras columnas ya que entiendo que también se requiere.

Puede descargarlo en este enlace:

https://drive.google.com/open?id=16sDF97mFkKCmxiU-qXYa_oN4pr_icxrX 

Cualquier cosa me comenta y con gusto.

¡Gracias! muy bueno el aporte de ustedes!!! ahora mi pregunta es si quiero cambiar el rango de la columnas columna D4 a D60 como modifico el código donde le pongo para que llegue hasta donde yo quiero?????

Es posible que en caso de que diga VENCIDO quede parpadeando en rojo las celdas acusadas???

Como lo hago....ya casi terminamos les voy a deber la vida por el ayudon que me dieron...

Le comparto la imagen donde va a sustituir el código por el rago que desea en la fila que esta seleccionada, quedando de la siguiente manera:

    Range("d5:d60").Select

Si desea que en las demás columnas llegue al mismo rango, sera necesario actualizar el esas columnas.

Saludos, sigo para cualquier cosa más.

Actualize el archivo aplicando color a las celdas según el status, el parpadeo aun no lo he incluido, lo puede descargar en el link

https://drive.google.com/open?id=16sDF97mFkKCmxiU-qXYa_oN4pr_icxrX https://drive.google.com/open?id=16sDF97mFkKCmxiU-qXYa_oN4pr_icxrX 

Estimado Víctor,  muchas gracias por la ayuda pero he intentado con el código que pusiste y no pude darle color a las celdas de la columna F4:F60 si el valor era de menor 30, luego sera posible reiniciar el chequeo para que las celdas de la columna vuelva a sus estado blanco???

Ayudaaaaa

Claro que si en un más tarde actualizo el archivo, voy a hacer unos pendientes y le dedico un tiempo al archivo. Me gustaría de ser posible todas las condiciones en su archivo. Por ej: cuando cuambiar de color, cuando volver a su estado original y demas condiciones de su archivo para que lo tenga más completo y que le sirva en un 100%,, también deje ver si es posible hacerte un pequeño tutorial de como esta integrado el código para que de alguna manera usted pueda hacer cambios en caso de ser necesario

En el enlace puede descargar el archivo que se llama "Control vencimientos sin color" también subí un pequelo tutorial "Tuto" espero haberme explicado, si no con gusto cualquier duda.

enlace: https://drive.google.com/open?id=16sDF97mFkKCmxiU-qXYa_oN4pr_icxrX 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas