21/10/16
Hola, Pablo
Si te entendí correctamente, esta rutina es la que estás buscando.
Entrá al Editor de VBA (Atajo: Alt + F11), allí insertá un módulo (Insertar-Módulo) y pegá el siguiente código:
Sub SumaUno()
'---- Variables modificables ----
'=== Pablo, modificá estos datos de acuerdo a tu proyecto:
IniCelda = "B1" ' fila de títulos en hoja de destino
MayorA = 30
'---- fin Variables
'
'---- inicio de rutina:
'
PrimFila = Range(IniCelda).Row
UltFila = ActiveSheet.Range(Left(IniCelda, 1) & Rows.Count).End(xlUp).Row - PrimFila + 1
cont = 0
For LaLinea = 0 To UltFila
If Range(IniCelda).Offset(LaLinea).Value > MayorA Then
Range(IniCelda).Offset(LaLinea, -1).Value = Range(IniCelda).Offset(LaLinea, -1).Value + 1
Range(IniCelda).Offset(LaLinea).Value = 0
'Range(IniCelda).Offset(LaLinea).ClearContents ' quitar el apostrofo del principio de esta linea para que borre el contenido de la celda
cont = cont + 1
End If
Next
ElMensaje = IIf(cont = 0, "NO SE MODIFICO CELDA ALGUNA" & Chr(10) & "porque no se encontró valor mayor a " & MayorA, "Cantidad de cambios: " & cont & " celda" & IIf(cont > 1, "s", ""))
TipoMens = IIf(cont = 0, vbCritical, vbInformation)
ElTitulo = IIf(cont = 0, "NO SE HIZO NADA", "TERMINADO!")
Application.ScreenUpdating = True
MsgBox ElMensaje, TipoMens, ElTitulo
End Sub
Como verás, al inicio podés indicarle donde empiezan los números a comparar y contra qué valor tiene que hacerlo.
Luego la rutina se encarga de saber dónde detenerse.
Habías pedido que, al cumplirse la condición, la celda de origen quede en cero. El código deja entonces un cero. Pero también tiene una linea anulada que borraría el contenido de la celda (que es distinto a que tenga un cero). Si te interesa esta opción basta que le saques el apóstrofo (') que tiene a la izquierda para que quede activa y haga eso.
Comentame si es lo que buscabas o, si necesitas más apoyo con esto, chiflame.
Un abrazo
Fernando
(Buenos Aires, Argentina)
.