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.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.