Macro para validar información de una columna especifico

Necesito su amable apoyo expertos...

Se debe crear una macro en un modulo para una hoja especifica "Hoja1", para una columna "W",

La macro debe recorrer desde W7 hasta W1000 validando los datos específicos 1, 1.5, 2, 3; solo estos números deben estar en esta columna.

Si hubiera otros números digitados por error, que no son los mencionados arriba como decimales entre otros, debe salir un mensaje mencionando "espesor ingresado no es el correcto" y al aceptar el foco me debe situarse en el rango donde esta el numero errado., al finalizar debe salir en mensaje "se valido los espesores correctamente".

1 Respuesta

Respuesta
2

Coloca en un módulo la siguiente macro:

Sub validaNros()
'x Elsamatilde
'se recorre col W hasta el fin de datos
X = Range("W" & Rows.Count).End(xlUp).Row
'se inicia en fila 7
[W7].Select
cadena = Array("1", "1,5", "2", "3")
While ActiveCell.Row <= X And salir = 0
    esta = 0
    For i = 0 To 3
        If ActiveCell = CDbl(cadena(i)) Then esta = 1: Exit For
    Next i
    If esta = 0 Then
        'opción 1: pintar la celda y continuar
        ActiveCell.Interior.ColorIndex = 6
        'opción 2: enviar mensaje y detenerse
        'MsgBox "espesor ingresado no es el correcto"
    End If
    ActiveCell.Offset(1, 0).Select
Wend
End Sub

Completa la cadena con tus valores. Aquí utilicé coma decimal pero bien puede ser punto decimal si ese es tu caso.

Dejé 2 opciones porque no comprendí si debe detenerse al encontrar el primer valor fuera de los permitidos o continuar. Si va a continuar es mejor marcarlos con un color que con un mensaje.

Dejá solo la mejor opción para tu caso.

Sdos.

Elsa

*La recomendación del mes: el manual de Bucles

Gracias por su respuesta Srta. Elsa Matilde

Los datos en las celdas de la columna "W" estarán el diferentes filas no necesariamente ordenados, como se ve en la imagen las otras filas (celdas) quedaran en blanco no se llenaran datos.

Lo que quiero es la Opción 2, enviar formulario y detenerse para seleccionar una de estas opciones (1, 1.5, 2, 3) al seleccionar una opción del formulario y aceptar debe sobrescribir la celda errónea,  la macro debe seguir ejecutándose así sucesivamente hasta terminar todas las filas hasta la celda "W1000", una vez terminado me debe salir al mensaje final informando que se "termino la validación de datos"

Saludos cordiales

Como habrás visto en mi imagen, los valores no están ordenados por lo que cumple con una de tus condiciones.

Si deseas abrir un formulario en lugar de enviar un mensaje como lo habías solicitado en un inicio ( debe salir un mensaje mencionando "espesor ingresado no es el correcto) modifica la instrucción de la opción 2 ajustando el nombre del formulario.

If esta = 0 Then
        'opción 1: pintar la celda y continuar
        'ActiveCell.Interior.ColorIndex = 6
        'opción 2: mostrar un Userform 'enviar mensaje y detenerse
         Userform1.Show     'ajustar nbre del UF
        'MsgBox "espesor ingresado no es el correcto"
    End If

Ahora aclara el nombre del UF y de los controles para programar el UF. Y todos los detalles que pudieras haberte olvidado de comentar. 

Sdos.

Elsa

Perfecto, Srta. Elsa Matilde por tus atenciones.

Disculpe, por haber modificado la pregunta inicial, me parece la ultima modificación seria lo más correcto, para que la macro se ejecuta hasta el final (W1000), solo los datos erróneos se reemplazaran con las opciones del formulario.

Nombres del UF = FormEsp

nombre OptionButton1  = 1"

nombre OptionButton2  = 1.5"

nombre OptionButton3  = 2"

nombre OptionButton4  = 3"

nombre CommandButton1 = Aceptar

Saludos

Felipe.

La macro del módulo quedaría así:

Sub validaNros()
'x Elsamatilde
'se recorre col W hasta la fila 1000
'se inicia en fila 7
[W7].Select
cadena = Array("1", "1,5", "2", "3")
While ActiveCell.Row <= 1000
'las celdas vacías no se controlan
If ActiveCell <> "" Then
    esta = 0
    For i = 0 To 3
        If ActiveCell = CDbl(cadena(i)) Then esta = 1: Exit For
    Next i
    If esta = 0 Then
        'se muestra el UF. desde allí se reemplaza el valor
        FormEsp.Show
    End If
End If
ActiveCell.Offset(1, 0).Select
Wend
MsgBox "Terminó la validación de datos."
End Sub

Y la del UF :

Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
    ActiveCell = 1
ElseIf OptionButton2.Value = True Then
    ActiveCell = 1.5
ElseIf OptionButton3.Value = True Then
    ActiveCell = 2
ElseIf OptionButton4.Value = True Then
    ActiveCell = 3
End If
Unload Me
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas