Macro que borre el contenido de una celda si cumple una condición

Pido su apoyo para realizar una macro que se ejecute en automático o después de haber capturado un valor, tengo un archivo en donde varias personas van a utilizar y necesito que la información sea lo más exacta posible

Tengo dos columnas

Celda a1(".5")

Celda b1 donde van a capturar cualquier valor

Lo que necesito es que si el valor capturado en b1 no es múltiplo de a1 sea borrado en automático o después de ser capturado

1 Respuesta

Respuesta
1

.15.05.17

Buenas, Johann

Me preguntaba si lo que quieres es que en la celda B1 no pueda ingresarse un valor que no sea múltiplo de lo que tiene como referencia la celda A1.

Si así fuera, no es necesario el uso de VBA, pues la función de validación de datos te permitiría hacerlo.

Como verás en la siguiente imagen, al intentar ingresar un número que no fuere multiplo de A1 recibirá un mensaje de error:

Puedes hacer esto seleccionando la celda de ingreso de dato (B1) y haciendo clicl en DATOS - Validacioón de Datos.

Tendrás una pantalla donde elijes "Personalizada" e ingresas en Fórmula lo siguiente:

=RESIDUO(B1;A1)=0

[Considera si usas comas o punto y coma para separar argumentos de las funciones. Yo usé ";"]

Con las otras dos pestañas podrás ingresarle el mensaje de entrada y de error que desees.

.

.

Buenas noches, de nuevo

Si, eventualmente, insistieras en que fuese resuelto por Visual BAsic, la siguiente rutina basada en el evento Cambio, es decir cuando se modifique la celda B1, hará algo similar a lo anterior.

Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja donde quieres que esto ocurra. Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código).

Allí pega el siguiente procedimiento de VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
'---- Variables modificables ----
'=== JOHANN, modifica estos datos de acuerdo a tu proyecto:
    CeldaIngr = "B1" 'celda donde se ingresa el dato
    CeldaRef = "A1" 'celda de referencia
'---- fin Variables
'
' VBA coding by FeJoAl
'
'---- inicio de rutina:
'  
If Target.Address(False, False) = CeldaIngr Then
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    ElValor = Range(CeldaIngr).Value
    Range(CeldaIngr).FormulaLocal = "=RESIDUO(" & Range(CeldaIngr) & Application.International(xlListSeparator) & Range(CeldaRef) & ")"
    Resto = Range(CeldaIngr).Value
    If Resto = 0 Then
        Range(CeldaIngr).Value = ElValor
    Else
        ElMensaje = "El valor ingresado en la celda " & CeldaIngr & " (" & Range(CeldaIngr).Value & ")" & Chr(10) & _
    "no es múltiplo del número de referencia en celda " & CeldaRef & ": " & Range(CeldaRef) & Chr(10) & "Reingrese un múltiplo en ella."
        ElTitulo = "NO ES MULTIPLO!"
        TipoMens = vbCritical
        MsgBox ElMensaje, TipoMens, ElTitulo
        Range(CeldaIngr).ClearContents
    End If
Application.EnableEvents = True
Range(CeldaIngr).Select
End If
End Sub

Bien, Johann, espero que cualquiera de ambas soluciones te ayuden.

Abrazo
Fer

.

Muchas gracias por el apoyo y la pronta respuesta los pondré en práctica

.

Un placer ayudar.

En lo personal, me inclinaría por la primera solución, pero depende de tu caso particular.

Un abrazo

Fer

.

Hola amigo solicitó de nuevo tu ayuda me genera un error al intentar correr la 

.

Buenas,

Tu mensaje quedó trunco.

Sería útil ver el mensaje de error y qué línea de la rutina te muestra al depurar.

De todos modos, asegúrate de que las variables indicadas al inicio sean las correctas de tu archivo:

    CeldaIngr = "B1" 'celda donde se ingresa el dato
    CeldaRef = "A1" 'celda de referencia

y que A1 no sea cero, claro

Saludos

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas