UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

Lehoi


Muy buenas

Tengo esta macro que he encontrado en internet que compara dos hojas y elimina las filas duplicadas en la hoja "Daily Data" basándose en las celdas de la columna H de la hoja "Matches Added".

La he modficado un poco para adaptarla a lo que necesito pero me he quedado atascado en el par de cosas que comenté en el título del Post:

1-Como excluir los headers del análisis
2-Como analizar las celdas en un rango de columnas de C a K en vez de las celdas de solo una columna (H) que es la que analizo actualmente.
Esto último es necesario porque así me aseguro de borrar las filas correctas, ya que analiza mas celdas y no solo una por fila.

Este es el código, de todas maneras si alquien quiere probar directamente en el libro al final del mensaje he puesto el link.
Cualquier ayuda será muy bienvenida, incluso si alguien tiene otro código que haga lo que busco, me vendría de maravilla.

Código:
Sub CleanDupes()

Dim targetArray, searchArray
Dim targetRange As Range
Dim x As Long

'Update these 4 lines if your target and search ranges change
Dim TargetSheetName As String: TargetSheetName = "Daily Data"
Dim TargetSheetColumn As String: TargetSheetColumn = "H"
Dim SearchSheetName As String: SearchSheetName = "Matches Added"
Dim SearchSheetColumn As String: SearchSheetColumn = "H"

Application.ScreenUpdating = False
'Load target array
With Sheets(TargetSheetName)
    Set targetRange = .Range(.Range(TargetSheetColumn & "1"), .Range(TargetSheetColumn & Rows.Count).End(xlUp))
    targetArray = targetRange
End With
'Load Search Array
With Sheets(SearchSheetName)
    searchArray = .Range(.Range(SearchSheetColumn & "1"), .Range(SearchSheetColumn & Rows.Count).End(xlUp))
End With

Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.CompareMode = 0
If IsArray(searchArray) Then
    For x = 1 To UBound(searchArray)
        If Not dict.exists(searchArray(x, 1)) Then
            dict.Add searchArray(x, 1), 1
        End If
    Next
Else
    If Not dict.exists(searchArray) Then
        dict.Add searchArray, 1
    End If
End If

'Delete rows with values found in dictionary
If IsArray(targetArray) Then
'Step backwards to avoid deleting the wrong rows.
    For x = UBound(targetArray) To 1 Step -1
        If dict.exists(targetArray(x, 1)) Then
            'targetRange.Cells(x).EntireRow.Delete
            targetRange.Cells(x).ClearContents
        End If
    Next
Else
    If dict.exists(targetArray) Then
        'targetRange.EntireRow.Delete
        targetRange.EntireRow.ClearContents
    End If
End If
Intersect([C:K], Columns("H").SpecialCells(xlBlanks).EntireRow).Delete xlUp
Application.ScreenUpdating = True
End Sub

Libro:
https://mega.nz/#!6sQHQYBa!Juh7w7DfYGw9M9noTVVTLNrQasz302sWXVg--HuthWY

Saludos

Igtelo


Hola Lehoi.

El uso de matrices es una "chulada" el tiempo de ejecución que utilizan es casi nada, pero... A veces no conviene usarlas, es mejor trabajar con colecciones u objetos (puedes buscar en la red al respecto).

El ejercicio te lo dejo hasta donde encuentra los duplicados, se logra fácilmente concatenando todas las celdas de columna C a K en su respectiva fila, esto para ambas hojas, así "aseguras" que los datos son iguales al 100%.

La terminas ya sea manualmente usando auto filtro o haces la macro correspondiente para eliminar los duplicados, recuerda que Excel tiene una función en el menú Datos para quitar los duplicados, bueno, hay le buscas; hay varias formas...

Verás que el tamaño de código es muy pequeño contra el de la matriz (como 5 veces menor), también hacemos uso de fórmulas que nos ayudan enormemente, etc, etc.

La puedes ejecutar con CTRL+k

Saludos
Ignacio Téllez
P.d: No se por qué subiste tu archivo al MEGA, si aquí se puede.
Archivos
Lehoi-duplicados de 2 hojas.xlsm
No tienes los permisos para descargar los archivos.
(30 KB)

Lehoi


Mi estímado Igtelo, tabla de salvación!!!

Disculpa la demora, justo estaba durmiendo (te llevo 6 horas de ventaja Wink ) y me despierta el teléfono avisándome de un correo, y aquí estoy 4 de la madrugada pero contento!!!

Creo que como siempre tienes toda la razón con lo de las matrices, son rapidísimas pero si no manejo grandes cantidades de datos es una complicación innecesaria. Pero ya sabes que uno se va creyendo cosas y ya se piensa uno que es un programador jajajaja, perdona la arrogancia de este novato Wink

He probado lo que me mandaste y luego de ajustarle las fórmulas porque en mi excel uso inglés y el buscarv me daba error, logré hacerlo funcionar. Va de lujo y como no pienso analizar más de 2000 filas creo que será lo suficientemente rápido, no puedo quejarme!

Lo de concatenar ya una vez lo usé para detectar duplicados en una hoja, pero no se me ocurrió usarlo para comparar entre dos hojas, además de que estoy muy verde y en la vida hubiera hecho un código tan conciso como el que tu hiciste, hubiese tendo 300 líneas mas jejejeje.

Muchísimas gracias (una vez mas) por ayudarme Maestro, lo que haces es impagable, ayudar a mucha gente que está aprendiendo, gracias!.

Tengo un poco de vergüenza de preguntar porque he preguntado mucho aquí y no me atrevo aún a ayudar a nadie, así que solo he recibido (bueno, salvo una pequeña donación que hice y que repetiré próximamente, el foro lo necesita y se lo merece claro que si) así que antes dejé esta misma pregunta en inglés (del malo) en mrexcel http://www.mrexcel.com/forum/excel-questions/959194-how-can-i-modify-macro-arrays-exclude-headers-extend-range-columns-analyzed.html, pero hasta ahora nada, así que iré corriendo a dar ese hilo por solucionado y poner el vínculo a esta solución por si a alguien le sirve, a mi por supuesto que si.
Esa es la razón por la que subí el fichero a Mega, porque allí no dejan subir ficheros directamente.

Un abrazo Igtelo, perdona el tocho, ya sabes que tengo una verborrea crónica  Very Happy!
Saludos!
Lehoi

Igtelo


Hola Lehoi.

Pues eso de que estás muy verde no, para el poco tiempo que llevas por el foro has avanzado muchísimo y lo que más me agrada es que estudias, practicas y le buscas, eso es excelente!!

Una sugerencia: Apaga el celular por la noche, ésta se hizo para darle descanso al cuerpo y hay que dárselo (el tiempo nos cobra la factura). Te estresas innecesariamente, supongo que eres casado, pues también interfieres el descanso de tu esposa, cuidado, mucho cuidado!!

La tecnología es buena siempre y cuando nos sirvamos de ella y no ella de nosotros...
Alguien nos enseñó hace poco más de 2 mil años: Bástele a cada día sus propios problemas.


Ok Felix, un cordial abrazo.

Ignacio Téllez

Lehoi


Muy buenas

Igtelo, disculpa la demora en contestar.
Tienes mucha razón en que estoy algo estresado, hasta sueño con macros, tablas, jejeje
Gracias por tus palabras sobre mi avance, pasé de "verde" a "pintón" como se dice en Cuba jaja, hasta maduro me falta mucho todavía Wink

un abrazo!

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.