macro para ordenar listado

Iniciado por tony82, 15 Abril 2009, 15:05 PM

0 Miembros y 1 Visitante están viendo este tema.

tony82

Buenos dias, estoy barado por un asunto, por favor ayudemen

tengo un listado con una serie de numeros.
Ejemplo:

1
2
6
1
4
9
6
9
2
Lo que quiero es con esta lista sacar los numeros en otra hoja aparte sin que se repitan y que queden en orden.
1
2
4
6
9
he realiazado esto pero no sirve  :huh:. no se que mas hacer.

i = 2
Do While i <= Worksheets("DatosCALLE").Cells(2, 14)
fila = 2
Do While Worksheets("DatosFRAC").Cells(fila, 15) <> 0
If Worksheets("DatosFRAC").Cells(fila, 15) <> Worksheets("DatosCALLE").Cells(i, 47) Then
Worksheets("DatosCALLE").Cells(i + 1, 47) = Worksheets("DatosFRAC").Cells(fila, 15)
i = i + 1
End If
fila = fila + 1
Loop
i = i + 1
Loop

Novlucker

#1
Antes que nada decir que lo que he hecho es una chapuza a modo de ejemplo, ... pero funcional  :xD

Para probarla, en una hoja ingresa algunos valores (alguno repetido) en una columna y luego en un nuevo modulo agrega lo siguiente:

Código (vb) [Seleccionar]
Sub Unica()
Dim valores() As String
Dim i As Integer, e As Integer, c As Integer

ReDim valores(0)
valores(0) = ActiveCell.Value
'Almacenamos la primera celda como primer valor del array
Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
'Pasamos a la celda siguiente

i = 1
Do While ActiveCell.Value <> ""
'Recorremos todas las celdas de una columna

    If repetido(ActiveCell.Value, valores) = False Then
    'Si la funcion repetido devuelve falso
        ReDim Preserve valores(i)
    'Redimensionamos el array
        valores(i) = ActiveCell.Value
    'Asignamos el valor
        i = i + 1
    End If
    Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
    'Pasamos a la siguiente celda
   
Loop

'Una vez generamos el array lo volcamos en otra pagina
c = 1
For e = LBound(valores) To UBound(valores)
    Sheets(2).Cells(c, 1).Value = valores(e)
c = c + 1
Next

End Sub

Function repetido(valor As String, aray() As String) As Boolean
'Recorremos el array comparando uno a uno sus valores
For e = LBound(aray) To UBound(aray)

    If valor = aray(e) Then
    'Si se encuentra el valor, entonces esta repetido
    'se sale del bucle y se asigna true a la funcion
        repetido = True
        Exit For
    Else
        repetido = False
    'De lo contrario es falso
    End If
Next
End Function


Con respecto al ordenamiento ... Métodos de ordenamiento<---click

Deberías de adaptarlo a tu "problema" y además ...seguro que se puede mejorar  ;)

Saludos  ;D
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein