Saltar al contenido

Busqueda anidada en columna, que cumpla 4 condiciones


Recommended Posts

publicado

Buen día a todos los que me permitan de su valioso tiempo.

Verán tengo dos archivos uno de nombre CodigosPostales.xls y el otro Listado_CodigosPostales_KOM.xlsx. El archivo codigos postales contiene el listado de CP de Mexico, donde cada estado es una hoja del libro, y cada hoja contiene, columnas con los nombres de Estado(Col-E), Ciudad(Col-F), Municipio(Col-D), Colonia(Col-B) y Codigo postal(Col-A).

El segundo archivo es un archivo de un listado de clientes y proveedores de una empresa, en donde vienen datos de Estado(Col-M), Ciudad(Col-K), Delegacion(Col-I), Colonia(Col-H), Nuevo codigo postal(Col-N), etc.

Se requiere actualizar los codigos postales en el archivo listado, obteniendolos del archivo codigos postales.

La cuestion es copiar los codigos postales del archivo Codigos poastales(Col-A) en el archivo Listado(Col-N), aplicando las condiciones correspondientes, al comparar la informacion de cada registro del archivo listado(estado, ciudad o municipio, colonia) contra la informacion del archivo codigos postales, y el registro que coincida en estas 4 condiciones en el archivo codigospostales se le copiará la columna codigo postal(Col-A) y se pegara en la columna Nuevo codigo postal (Col-N) en el archivo listado.

Por ejemplo

del archivo listado se toma el primer registro, y se debera comparar Estado(Col-M), Ciudad(Col-K) ó Delegacion(Col-I) y Colonia(Col-H) contra cada registro del archivo codigospostales, y cuando todas las condiciones coincidan, se debera obtener el codigo postal (Col-A) del archivo codigospostales y pegarlo en Nuevo codigo postal(Col-N) del archivo listado.

Espero me halla explicado y me puedan ayudar con alguna formula o macro que resuelva este problema ya que son bastantes registros y revisar cada uno con estas 4 condiciones es muy tardado.

Nota: algunos regsitros quedaran en blanco al no coincidir ya que hay registros vacios en los campos colonia y/o municipio o ciudad del archivo listado, pero no importa, el objetivo es que los demas registros que si tengan informacion factible se obtega el nuevo codigo postal.

Nota 2: por cuestiones de tamaño no me permite subir mis archivos a este post asi que opte por usar links para descarga directa desde mi dropbox.

Saludos y de antemano gracias por su tiempo, les anexo los archivos en cuestion.

CodigosPostales.xls

Listado_CodigosPostales_KOM.xlsx

publicado
Hola Ernesto, una forma sencilla es concatenar en ambas hojas las 4 condiciones y aplicar buscarv.

Hola Armando, gracias por tu pronta respuesta, pero no la entiendo del todo podrias explicarmela mas a detalle de favor.

publicado

Está complicado por el volumen del archivo de Códigos Postales.

Mañana o pasado mañana, intentaré buscarte una solución.

En cualquier caso te diré algo.

publicado

Concatena los campos: estado, ciudad o municipio, colonia, en ambas hojas y esa concatenacion colocala en una columna auxiliar a la izquierda de cada hoja.

Ejemplo asumiendo que las condiciones estan en las columnas A:D:

1. Insertar columna a la izquierda de la columna A en ambas hojas

2. Formula en A2 -columna nueva insertada: =B2&C2&D2&E2

En A2 quedara algo asi: estadociudadmunicipiocolonia.

En la columna N de hoja listado aplicas la fomula BUSCARV para buscar en la otra hoja.

La columna Colonia no la encontre en la hoja Codigos.

Aqui hay info para ambas funciones:

La función Concatenar en Excel

BUSCARV - Excel - Office.com

publicado
Concatena los campos: estado, ciudad o municipio, colonia, en ambas hojas y esa concatenacion colocala en una columna auxiliar a la izquierda de cada hoja.

Ejemplo asumiendo que las condiciones estan en las columnas A:D:

1. Insertar columna a la izquierda de la columna A en ambas hojas

2. Formula en A2 -columna nueva insertada: =B2&C2&D2&E2

En A2 quedara algo asi: estadociudadmunicipiocolonia.

En la columna N de hoja listado aplicas la fomula BUSCARV para buscar en la otra hoja.

La columna Colonia no la encontre en la hoja Codigos.

Aqui hay info para ambas funciones:

La función Concatenar en Excel

BUSCARV - Excel - Office.com

Gracias por la orientacion ya estoy probando con esa idea. luego les informo, y claro si alguien tien otras ideas igual son bienvenidas quiero probar varias para ver cual puede ser mas eficiente y menos tediosa, o sino solo ara conocerlas y saber como se hacen, saludos.

  • 2 months later...
publicado

Buenas,

Yo estoy intentando algo similar, y tampoco le veo forma. Quisiero sacar de un listado de N equipos, solamente la fila que cumpla una condicion determinada. Adjunto excel, le dí mil vueltas y seguro que es la mayor tonteria por lo que no lo saco. El excel es mínimo....

Espero alguien me ayude a concantenar, o buscar la mejor solucion posible.

Libro1.zip

publicado

Buenos das,

Si las leí, disculpas, lo que no quiero es duplicar temas. Pido borrar el anterior post y creo mi propio tema.

Un Cordial Saludo.

PD: Nuevamente, pido disculpas.

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
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • 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.