Eliminar números repetidos en excel

Como puedo eliminar las celdas con números repetidos de 4 cifras en la hoja 1 y los pase a la hoja 2 ordenadamente en forma descendente desde 0000 a 9999 como la imagen

1

1 Respuesta

236.125 pts. Programador - Administrador

[Hola

Yo te recomiendo lo siguiente:

- Coloca todo en una sola columna de una hoja cualquiera

- Aplica la herramienta "Quita duplicados" de la pestaña "Datos" (grupo "Herramientas de datos") de la Cinta de Opciones.

- A los datos únicos que te quedarán, aplícales la herramienta "Ordenar" de la misma pestaña (grupo "Ordenar y filtrar)

- Después de eso puedes hacer que se copie/pegue de 100 en 100 en cada columna con macros, ya con registros únicos y ordenados no creo que se te complique

Saludos]

Abraham Valencia

PD: Lo otro es hacerlo todo con macros usando "Arrays", bucles y utilizando el "método de la burbuja" para conseguirlo, pero te aseguro que más será el tiempo que tome pensar y programar cuando puedes hacerlo más rápido con las mismas herramientas de Excel que te he recomendado

Me gustaría con macros ya que no es que se peguen de 100 en 100 es que llegue al ultimo dígito de centena y siga en la otra columna

Ejemplo 0092 y sigue 0103

¿Cuál es el número superior? ¿9999?

Saludos]

Abraham Valencia

La idea es que cuando ya se halla eliminado los repetidos, ordenarlos en forma como la imagen; cuando cambie la centena seguirá a la siguiente columna los siguientes números ejemplo

Columna a columna b columna c

0097                0104               0203

0098                0107               0208

[Hola

Suponiendo que ya todos los registros únicos están en la columna "A", usando algo así no deberías tener problema:

Sub Prueba()
Dim UltimaFila As Long
Dim Celda As Range
Dim nColumna As Integer
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row
For Each Celda In Range("A1:A" & UltimaFila)
    Let nColumna = Int(Celda.Value / 100) + 2
    Let UltimaFila = Cells(Rows.Count, nColumna).End(xlUp).Row + 1
    Cells(UltimaFila, nColumna).Value = Celda.Value
Next Celda
End Sub

Comentas

Abraham Valencia

Primero un código que me elimine los números repetidos en la hoja 1 y los números que me queden los enviara ordenadamente como la imagen

¿Y por qué no haces lo que te recomendé con las propias herramientas de Excel?

Abraham Valencia

PD: Sabes que aquí nadie nos paga por ayudar ¿cierto?

Y de acuerdo al código si los datos únicos estuvieran en la hoja 1 y quisiera pasarlos a la hoja 2 como la imagen como se modificaría el código

Cuando se trabaja sobre hojas distintas, se hace referencia a ellas, es cuestión de agregarlo pero sobre todo, de entender lo que hace cada línea:

Sub Prueba()
Dim UltimaFila As Long
Dim Celda As Range
Dim nColumna As Integer
Let UltimaFila = Worksheets("Hoja1").Cells(Rows.Count, 1).End(xlUp).Row
For Each Celda In Worksheets("Hoja1").Range("A1:A" & UltimaFila)
    Let nColumna = Int(Celda.Value / 100) + 1
    Let UltimaFila = Worksheets("Hoja2").Cells(Rows.Count, nColumna).End(xlUp).Row + 1
    Worksheets("Hoja2").Cells(UltimaFila, nColumna).Value = Celda.Value
Next Celda
End Sub

Abraham Valencia

Se ejecuta muy bien maestro pero podremos agregarle que comience a partir de la primera celda ya que no tengo encabezados y la segunda condición seria que cuando se llegue a la centena 900 me de un espacio de una columna para comenzar en 1000

Al igual que todos por aquí, cuando ayudo me doy tiempos muy cortos dentro de los pocos minutos libres que tengo y por lo tanto, si escribo/hago una macro para ayudar a alguien, la hago de tal modo que justamente no me lleve más que unos cuantos minutos (a veces más si es fin de semana o si es algo realmente de mi interés/curiosidad por su dificultad) y entonces no necesariamente le pongo controles de error (propios o de VBA) o agrego líneas de código que me tomen más tiempo ya que, como siempre digo, para mí lo que hago son ejemplo para los demás, y si quieren usar VBA deben sobre todo entender lo que se les envía, no solo copiarlo/pegarlo.

En tu caso en el bucle "for" debes agregar un "If-Else" que verifique si la fila es la 1, y de ser así que no le sume ese 1 a la variable "UltimaFila". En el caso de las columnas pues igual otro "If" para que cuando la variable "nColumna" sea 10, 20, 30, etc., o sea cuando llega a 1000, 2000, 3000, etc., deje una columna vacía como pareces necesitar. Ah, claro, en eso último el dilema es que debe agregar código de tal modo que agregue esa columna solo la primera vez que encuentra esos número mencionados en la variable pero, justamente de eso se trata la programación, de pensar como hacer las cosas y convertirlas en código y eso, evidentemente, toma tiempo que yo no necesariamente tengo cuando ayudo a la gente.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas