martes, 1 de marzo de 2011

VBA: Condición con macro - Selectionchange.

Un asiduo del blog planteaba la siguiente cuestión:

...tengo una tabla donde existe un campo estado, quisiera que me ayude en lo siguiente:
En el campo 'estado' aparezca por ejemplo: Atendido Según lo solicitado si el campo enviado = campo solicitado, Menos de lo solicitado si el campo enviado < campo solicitado, Más de lo solicitado si el campo enviado > campo solicitado, No atendido si el campo enviado no hay ningún valor...


Solicita, mediante un desarrollo en VBA, que para cada registro en su tabla, se evalue qué condición cumple para dos de sus campos a estudio (Enviado - Solicitado) y aparezca en un tercer campo (Estado) su situación.
Veamos un pequeño ejemplo de la estructura de trabajo:


Emplearé algunos términos ya conocidos, como son:
IF...THEN..ELSE
FOR EACH... IN... NEXT
Se trata en definitiva de definir sobre cada una de las celdas de un rango determinado, una serie de condiciones dadas por una función IF.
El código a incluir en el Editor de VBA (Alt+F11), dentro de la Hoja de trabajo es:

Private Sub worksheet_selectionchange(ByVal target As Range)
Dim celda As Object

For Each celda In Range("C2:C5")

If Cells(celda.Row, celda.Column - 1).Value _
= Cells(celda.Row, celda.Column - 2).Value Then _
celda = "Atendido Según lo solicitado"
If Cells(celda.Row, celda.Column - 1).Value _
< Cells(celda.Row, celda.Column - 2).Value Then _
celda = "Más de lo solicitado"
If Cells(celda.Row, celda.Column - 1).Value _
> Cells(celda.Row, celda.Column - 2).Value Then _
celda = "Menos de lo solicitado"
If Cells(celda.Row, celda.Column - 2).Value = "" Then _
celda = "No atendido"

Next

End Sub


El resultado es que para cada celda del rango C2:C5 definido, se evalua mediante esta macro, cada vez que haya un cambio en los valores de las columnas A y B, devolviendo el texto comparativo entre ambas:

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.