Saltar al contenido

eliminar repetidos


Recommended Posts

publicado

hola jhon fredy rodriguez  dejo una posible solución espero que te funcione

https://www.extendoffice.com/es/documents/excel/3328-excel-keep-only-one-duplicate.html

Sub RemoveAllDeplicateButOne()
    Dim LR As Long:
    LR = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("A1:CY" & LR).RemoveDuplicates Columns:=1, Header:=Name
End Sub

saludo isidrod

publicado

Con la grabadora se obtiene esto:

    ActiveSheet.Range("$A$1:$CY$42").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, _
        7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, _
        34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, _
        60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, _
        86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103), Header:=xlNo

 

publicado

la idea es eliminar los repetidos que estan en ese rango "a1:cy42" pero con la condicion de dejar solo uno de esos numeros repetidos y eliminar el resto 

 

publicado
Hace 16 minutos , jhon fredy rodriguez dijo:

la idea es eliminar los repetidos que estan en ese rango "a1:cy42" pero con la condicion de dejar solo uno de esos numeros repetidos y eliminar el resto 

Pero la idea es que vas a empezar a revisar los números por FILAS? o por COLUMNAS?, Empiezas con el numero 2502 y revisas hacia abajo COLUMNA o hacia la derecha FILAS?

Saludos.

publicado

este codigo hace lo que busco elimina los repetidos por columna  dejando uno solo de ellos pero como modificarlo para que elimine los repetidos de acuerdo al rango a1:cy42 dejando uno de ellos

Sub Macro1()
Dim i%
Application.ScreenUpdating = False
For i = 1 To 35
  Columns(i).RemoveDuplicates Columns:=1, Header:=xlNo
Next
Application.ScreenUpdating = True
End Sub
 

publicado
Hace 1 minuto , Leopoldo Blancas dijo:

Pero la idea es que vas a empezar a revisar los números por FILAS? o por COLUMNAS?, Empiezas con el numero 2502 y revisas hacia abajo COLUMNA o hacia la derecha FILAS?

Saludos.

maestro hacia la derecha seria lo mejor 

publicado

Algo lenta, pero funciona:

Sub EliminarDuplicados()
Dim Rango As Range
With ActiveSheet
   Set Rango = .UsedRange
   For x = 1 To .UsedRange.Rows.Count
      Application.StatusBar = "Analizando fila " & x
      For y = 1 To .UsedRange.Columns.Count
         If Not .Cells(x, y) = "" Then
            If WorksheetFunction.CountIf(Rango, .Cells(x, y)) > 1 Then
               .Cells(x, y).Delete
            End If
         End If
      Next
   Next
End With
End Sub

Se puede mejorar, pero estoy harto de resolverte las mismas consultas, una y otra vez. :angry:

publicado
Hace 2 horas, jhon fredy rodriguez dijo:

este codigo hace lo que busco elimina los repetidos por columna  dejando uno solo de ellos pero como modificarlo para que elimine los repetidos de acuerdo al rango a1:cy42 dejando uno de ellos

Se puede hacer desde Power Query y es muy eficiente

 

Saludos 

publicado
Hace 48 minutos , Antoni dijo:

Algo lenta, pero funciona:


Sub EliminarDuplicados()
Dim Rango As Range
With ActiveSheet
   Set Rango = .UsedRange
   For x = 1 To .UsedRange.Rows.Count
      Application.StatusBar = "Analizando fila " & x
      For y = 1 To .UsedRange.Columns.Count
         If Not .Cells(x, y) = "" Then
            If WorksheetFunction.CountIf(Rango, .Cells(x, y)) > 1 Then
               .Cells(x, y).Delete
            End If
         End If
      Next
   Next
End With
End Sub

Se puede mejorar, pero estoy harto de resolverte las mismas consultas, una y otra vez. :angry:

maestro antoni me disculpo .....pero me sale error en esta linea 

If Not .Cells(x, y) = "" Then

publicado

@jhon fredy rodriguez

Revisando tus preguntas... efectivamente haz preguntado varias veces sobre lo mismo o parecido... no crees que ya es hora de estudiar un poco...???

Te envió mi solución... pero es la última de mi parte.

image.gif.ee8d9ddea1e6be12895ad851e3599f65.gifMIENTRAS DOMINO PQ... y PV....POR LAS PIEDRITAS...

Sub EliminarDuplicados_LBV()
Dim Celda As Range, Cel As Range, t
    t = Time
    Application.ScreenUpdating = False
    For Each Celda In Range("A1:CY42")
        If Celda.Value <> "" Or Celda.Value <> Empty Then
            For Each Cel In Range("A1:CY42")
                If Cel.Value = Celda.Value Then
                    If Cel.Address <> Celda.Address Then
                        Cel.Value = ""
                    End If
                End If
            Next Cel
        End If
    Next Celda
    Application.ScreenUpdating = True
    MsgBox Time - t
End Sub

Saludos.

P.D.: ES MUY LENTA... PERO NO DEJA DUPLICADOS.

publicado
Hace 4 horas, jhon fredy rodriguez dijo:

Sub Macro1()
Dim i%
Application.ScreenUpdating = False
For i = 1 To 35
  Columns(i).RemoveDuplicates Columns:=1, Header:=xlNo
Next
Application.ScreenUpdating = True
End Sub

Este código lo hizo Cacho R... CUANDO VAS A HACER TU TUS INTENTOS....?

ERES DE LOS QUE SOLO COPIAN Y PEGAN Y SI JALA BIEN Y SI NO SIGO PREGUNTANDO???   CREO QUE SI.

Saludos y SUERTE!!!

publicado
Hace 13 horas, Leopoldo Blancas dijo:

@jhon fredy rodriguez

Revisando tus preguntas... efectivamente haz preguntado varias veces sobre lo mismo o parecido... no crees que ya es hora de estudiar un poco...???

Te envió mi solución... pero es la última de mi parte.

image.gif.ee8d9ddea1e6be12895ad851e3599f65.gifMIENTRAS DOMINO PQ... y PV....POR LAS PIEDRITAS...


Sub EliminarDuplicados_LBV()
Dim Celda As Range, Cel As Range, t
    t = Time
    Application.ScreenUpdating = False
    For Each Celda In Range("A1:CY42")
        If Celda.Value <> "" Or Celda.Value <> Empty Then
            For Each Cel In Range("A1:CY42")
                If Cel.Value = Celda.Value Then
                    If Cel.Address <> Celda.Address Then
                        Cel.Value = ""
                    End If
                End If
            Next Cel
        End If
    Next Celda
    Application.ScreenUpdating = True
    MsgBox Time - t
End Sub

Saludos.

P.D.: ES MUY LENTA... PERO NO DEJA DUPLICADOS.

muchas gracias

 

publicado

Holas! 

John: no se si quedó resuelto o no quedaste convencido, pero de todas formas, te adjunto otra solución con VBA, de hecho van 2 opciones 

El proceso con tus 103 columnas, no se tarda ni un segundo, así que no vas a tener problemas con el rendimiento

El método utilizado es trabajando los datos en memoria, en la mayoría de casos es muy eficiente!, incluso más rápida que la de @Manuel_Mendoza con Power Query :P :D

Comentas para finalizar el tema

 

Saludos 

Extraer unicos cada columna Vba_GP.zip

  • 4 weeks later...
publicado
En 12/1/2019 at 22:13 , Gerson Pineda dijo:

Holas! 

John: no se si quedó resuelto o no quedaste convencido, pero de todas formas, te adjunto otra solución con VBA, de hecho van 2 opciones 

El proceso con tus 103 columnas, no se tarda ni un segundo, así que no vas a tener problemas con el rendimiento

El método utilizado es trabajando los datos en memoria, en la mayoría de casos es muy eficiente!, incluso más rápida que la de @Manuel_Mendoza con Power Query :P :D

Comentas para finalizar el tema

 

Saludos 

Extraer unicos cada columna Vba_GP.zip

maestro gerson el ultimo codigo del maestro leopoldo me funciona no me importa el tiempo pero podremos modificar el codigo ya que me ocasiona otro problema con un codigo de mi libro eliminando los repetidos y dejando la celda en blanco 

le agradeceria mucho

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

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • 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

    • 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 
    • Podrías compartir tu solucion
  • 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.