Jump to content
richicho24

Elementos repetidos en fila, ayuda

Recommended Posts

Querida comunidad necesito su ayuda en la siguiente tarea, se los agradeceria mucho ya que llevo semanas intentando pero no encuentro una manera factible que me ayude sintetizar mi tarea.

Tengo una base de datos de 45 234 filas con 22 columnas (desde A hasta T), todas estas se encuentran llenas. Cada fila representa información de un reporte que tiene que ser UNICO, no pueden haber duplicados. El tema es que los operadores de manera errónea generan 3 o 4 reportes para un mismo caso.

Por ello, el objetivo de esta macro es CONTABILIZAR TODOS LOS REPORTES sin tomar en cuenta aquellos duplicados con información repetida UNICAMENTE de las columnas D-E-F-J-K-Q-R. Adjunto una imagen de referencia de 2 filas que representan un mismo reporte debido a información repetida de las columnas mencionadas. Tomándo en base este ejemplo, necesito que esto se replique en toda la base de datos de manera que tenga 1 columna donde me contabilize el reporte unico y su duplicado como 0. Como extra, si fuera posible mostrar otra columna que diga OK y DUPLICADO para verificar la información (opcional), estaria bien.

Luego con la columna de CONTEO con 1 y 0 se tiene que crear una tabla dinámica, pero esto es manual, no necesito macro para esto. ESTE OBJETIVO DE LA MACRO ES TENER TODA LA BASE DE DATOS SETEADA CON 1 Y 0.

En el adjunto encontrarán el excel. La columna "Q" de Serial Number fue filtrado en orden para mostrar los pares de duplicados. La información original viene desordenada pudiendose encontrar el duplicado en diferentes filas no necesariamente consecutiva. 

Agradezco de antemano su apoyo comunidad.

Gracias !!!!!!!!

Base de Datos - Copy - Copy.xlsx

Share this post


Link to post
Share on other sites
24 minutes ago, johnmpl said:

Hola @richicho24 y bienvenido al foro.

Revisa el adjunto.  Lo que pides se puede solucionar con formulación.  Si no te interesan las mismas, luego puedes copiar y pegar como valores.  ¡Bendiciones!

Base de Datos - Copy - Copy.zip

John, muchas gracias por el atajo con formula, no me había puesto a pensar esa manera de seleccionar las celdas hacia arriba, lo que yo hacía era seleccionar todas las columnas condicionales como D:D, E:E, F:F ... etc.

Bajo ese esquema de fórmula desarrolle la siguiente macro pero no se agregar la funcion "N" que convierte a TRUE O FALSE, una ayudita please

Sub Go1()
Dim i As Double
Dim final As Double

'Calculamos el rango de los datos en la columna A
Worksheets("Sheet1").Select
final = Application.CountA(Worksheets("Sheet1").Range("a:a"))

    For i = 2 To final
    
    'Contamos las veces que se repiten cada uno de los nombres en el rango seleccionado
    CIM_case = Worksheets("Sheet1").Cells(i, 4).Value
    Turbine_number = Worksheets("Sheet1").Cells(i, 5).Value
    Report_type = Worksheets("Sheet1").Cells(i, 6).Value
    Created_date = Worksheets("Sheet1").Cells(i, 10).Value
    Inspection_date = Worksheets("Sheet1").Cells(i, 11).Value
    Blade_serial = Worksheets("Sheet1").Cells(i, 17).Value
    Fault_Area = Worksheets("Sheet1").Cells(i, 18).Value
    
    Worksheets("Sheet1").Cells(i, 21).Value = Application.CountIfs( _
    Worksheets("Sheet1").Range("D1:D" & final), CIM_case, _
    Worksheets("Sheet1").Range("E1:E" & final), Turbine_number, _
    Worksheets("Sheet1").Range("F1:F" & final), Report_type, _
    Worksheets("Sheet1").Range("J1:J" & final), Created_date, _
    Worksheets("Sheet1").Range("K1:K" & final), Inspection_date, _
    Worksheets("Sheet1").Range("Q1:Q" & final), Blade_serial, _
    Worksheets("Sheet1").Range("R1:R" & final), Fault_Area) < 2
    
    Next
   

End Sub

________________

Si existe una manera mas práctica via macro, te agradeceria saber.

Saludos

 

 

 

 

Share this post


Link to post
Share on other sites

¡Hola de nuevo!

Puedes usar la siguiente macro:

Sub ConteoAndStatus()
    Dim uf&
    
    uf = Range("A" & Rows.Count).End(xlUp).Row
    
    Application.ScreenUpdating = False
    Range("V2:V" & uf).Formula = "=N(COUNTIFS(D$2:D2,D2,E$2:E2,E2,F$2:F2,F2,J$2:J2,J2,K$2:K2,K2,Q$2:Q2,Q2,R$2:R2,R2)<2)"
    Range("W2:W" & uf).Formula = _
        Replace("=IF(COUNTIFS(D$2:D$#,D2,E$2:E$#,E2,F$2:F$#,F2,J$2:J$#,J2,K$2:K$#,K2,Q$2:Q$#,Q2,R$2:R$#,R2)>1,""Duplicado"",""OK"")", "#", uf)
    With Range("V2:W" & uf)
        .Copy: .PasteSpecial xlPasteValues
    End With
    
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

¡Bendiciones!

Share this post


Link to post
Share on other sites

Hola @johnmpl y @richicho24

Excelente aporte John, estaba leyendo y tratando de entender la solicitud y llegaron tus respuestas, y solo tengo una pregunta de acuerdo a lo que había entendido, no primero se tendría que orden por la columna "Q", esta haciendo una Macro y puse:

Range("A1", Cells(uF, "V")).Sort Key1:=Range("Q1"), Order1:=xlAscending, Header:=xlGuess

Y posterior obtener los duplicados,

Saludos !!!

Mucha Suerte  @richicho24

Share this post


Link to post
Share on other sites
Hace 18 horas, Max2005 dijo:

no primero se tendría que orden por la columna "Q", esta haciendo una Macro

Hola @Max2005

No es necesario realizar la ordenación.  La formulación presentada toma los repetidos tal cual como estén.  Si hay un repetido en la parte inferior, le coloca un 0.  La ordenación por la columna "Q" es solamente para ver de forma visual los datos duplicados juntos.  ¡Bendiciones!

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png