Saltar al contenido

Macro comparar datos celda con lista


Recommended Posts

publicado

Hola amigos, espero estar siguiendo bien las normas del foro. Les explico, tengo un listado de "datos importantes" en una de las hojas del archivo Excel. En la otra tengo simplemente la hoja de entrada de datos por parte del usuario. La idea es que ingresará los datos en X rango, es decir, es arbitrario ese rango, pero lo importante sería poder comparar lo que ingrese el usuario, con los valores en la lista de "Datos importantes". De tal forma que si el usuario ingresa un dato considerado importante, la celda en la que lo ingrese se pinte de cierto color, y además aparezca un message box avisándole que es un dato importante.

Esto lo quiero hacer porque el listado real es de tablas de SQL que usan numeradores. Entonces la idea es que si alguien actualiza manualmente una de esas tablas, cuando registre en este archivo lo que hizo, la macro debería avisarle al usuario algo así como "Has modificado una tabla que usa numeradores, no olvides actualizar su respectivo índice".

Intenté guardar los datos de ambos listados (ingresados e importantes) en una variable y traté de compararlos con un [if] y con un [Case] pero no obtengo resultados de salida, es decir el resultado lo grabo en una variable y la despliego en una celda, pero la celda queda en blanco.

Les incluyo el código aquí en el comentario así los demás usuarios pueden verlo y aprender de su respuesta.


'antes era Private Sub checknum() pero hay que ver que se ejecute bien y luego se hace private para que se ejecute en forma automática

Sub checknum()

Dim checkcell, checkedcells As String

checkcell = Range("EE2:EE218").Select

checkedcells = Columns(2, "A").Select

For Each cell In checkcell

'checkedcells = cell.Value

'For Each Cell In checkedcells

If checkedcells = checkcell Then

With Selection.Interior

.Pattern = xlSolid

.PatternColorIndex = xlAutomatic

.Color = 5296274

.TintAndShade = 0

.PatternTintAndShade = 0

End With

Else

End If

Next

End Sub

[code]

Comparar valor con lista.xls

publicado

Buenas, yaguarete79

Si no te importa, adjunta un ejemplo con la estructura real de tu archivo, aunque con datos ficticios......no me termino de hacer a la idea de lo que quieres hacer....

Un saludo,

Tese

publicado
Hola amigos, espero estar siguiendo bien las normas del foro. Les explico, tengo un listado de "datos importantes" en una de las hojas del archivo Excel. En la otra tengo simplemente la hoja de entrada de datos por parte del usuario. La idea es que ingresará los datos en X rango, es decir, es arbitrario ese rango, pero lo importante sería poder comparar lo que ingrese el usuario, con los valores en la lista de "Datos importantes". De tal forma que si el usuario ingresa un dato considerado importante, la celda en la que lo ingrese se pinte de cierto color, y además aparezca un message box avisándole que es un dato importante.

Hola, hasta aquí en tu mensaje creo haber entendido. Yo tuve una necesidad parecida alguna vez y solo se me ocurrió un método un poco restringido. Y es que funciona solamente si después de digitar el dato en la Hoja 1 se presiona ENTER o la flecha ABAJO para pasar a la siguiente celda, si presionas otra tecla después de digitar para pasar a la siguiente celda (es decir las otras flechas DERECHA, IZQUIERDA, ARRIBA o TAB) entonces no funciona correctamente.

Dejo el archivo para que lo revises y tal vez te da alguna idea. Si encuentras otro método no dudes en publicarlo aquí porque estoy seguro que a muchos nos ayudaría.

Comparar valor con lista.xls

publicado

Hola, muchas gracias por la pronta respuesta. Subo un archivo muestra. Lo que quiero hacer es validar los datos que se ingresen en la columna "A" ("Tabla modificada") contra los datos de la columna "C" ("usan numerador"), que puede esta segunda columna estar o no en la misma hoja. Preferiría que se pudiera ejecutar con estos datos en una hoja oculta al usuario (dentro del mismo libro, claro). Yo lo puse así ahora para mostrar mejor la comparación. En la otra hoja (Hoja2) lo único que viene es un listado con todos los valores que se pueden ingresar en la columna A. En resumen, sería ese el conjunto total de datos posibles, y en la columna "C" de la hoja "datos a actualizar...etc" sería solamente un sub-conjunto de estos datos. Si algún dato ingresado en la columna "A" es igual a uno de los datos de la columna "C", entonces debe pintarse la celda y aparecer el mensaje. Subo el ejemplo porque faltaría un poco para llegar a esa solución que quiero, aunque el trabajo del amigo "miwebds" se aproxima bastante a la solución definitiva.

- - - - - Mensaje combinado - - - - -

Gracias miwebds, el archivo que subiste es prácticamente lo que quiero. Me sorprendió que se ejecute la macro aunque la extensión del archivo no sea .xlsm; ¿es porque es un Private Sub?

Seguiré buscando a ver si hay otra opción, ¡muchas gracias! Subí otro archivo más claro para que también "tese1969" pueda aportar ideas. Y claro que si llego a alguna solución mejor con gusto la comparto aquí en el foro, eso denlo por hecho.:smug:

Muestra comparar valores con listado.xls

publicado

Hola a todos tres:

Yo le he dado un enfoque distinto, localizo las tablas especiales por el color de su celda y hago la comprobación de forma automática al seleccionar de la lista.

Aunque ya está en el adjunto, os dejo la macro en código.

En la hoja donde introduciremos los datos:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then
Set Tabla = Sheets("Listas").Range("A:A").Find(What:=Target.Value)
Target.Interior.ColorIndex = Tabla.Interior.ColorIndex
If Tabla.Interior.Color = vbYellow Then
MsgBox "Has seleccionado una tabla amarilla", vbInformation
End If
End If


End Sub


[/CODE]

Saludos

ComprobarTablas.zip

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.