Jump to content

Ordenar tabla por cada Id distinto en columna A


Maria_80

Recommended Posts

Hola, tengo una macro que ordena por fecha solo los datos que se muestran en un filtro (columna B = C). El ejemplo está en la primera hoja (secuencia) y lo hace perfecto.

Estoy intentando hacer lo mismo pero que ordene por cada grupo de Id distinto de la columna A. El ejemplo está en la segunda hoja (secuencia dos), pero no lo consigo. Se me ordena igualmente la tabla entera. ¿Podéis echarle un vistazo al código? Algo se me escapa.

Hay una tercera hoja con una copia de la tabla de ejemplo porque cada vez que paso la macro me la cargo y así la copio de nuevo directamente.

Gracias de antemano.

Ordena_fecha.xlsm

Link to comment
Share on other sites

Espero sea lo que estas buscando:

Sub ordena_id()
    r = 2
    i = 2
    Id = Cells(r, 1)
    
    Do While Cells(r, 1) <> ""
        If Cells(r, 1) <> Id Or Cells(r + 1, 1) = "" Then
            If Cells(r + 1, 1) = "" Then
                k = 0
            Else
                k = 1
            End If
            Range("A" & i & ":e" & r - k).Select
            ActiveWorkbook.Worksheets("Secuencia_Dos").Sort.SortFields.Clear
            ActiveWorkbook.Worksheets("Secuencia_Dos").Sort.SortFields.Add2 Key:=Range( _
                "D" & i & ":d" & r - k), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                xlSortNormal
            With ActiveWorkbook.Worksheets("Secuencia_Dos").Sort
                .SetRange Range("A" & i & ":e" & r - k)
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            i = r
            Id = Cells(r, 1)
        End If
        r = r + 1
    Loop
    Range("a1").Select
End Sub
 

 

Link to comment
Share on other sites

  • 4 weeks later...
On 9/12/2021 at 12:24 AM, Janlui said:

Espero sea lo que estas buscando:

Sub ordena_id()
    r = 2
    i = 2
    Id = Cells(r, 1)
    
    Do While Cells(r, 1) <> ""
        If Cells(r, 1) <> Id Or Cells(r + 1, 1) = "" Then
            If Cells(r + 1, 1) = "" Then
                k = 0
            Else
                k = 1
            End If
            Range("A" & i & ":e" & r - k).Select
            ActiveWorkbook.Worksheets("Secuencia_Dos").Sort.SortFields.Clear
            ActiveWorkbook.Worksheets("Secuencia_Dos").Sort.SortFields.Add2 Key:=Range( _
                "D" & i & ":d" & r - k), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                xlSortNormal
            With ActiveWorkbook.Worksheets("Secuencia_Dos").Sort
                .SetRange Range("A" & i & ":e" & r - k)
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            i = r
            Id = Cells(r, 1)
        End If
        r = r + 1
    Loop
    Range("a1").Select
End Sub
 

 

Gracias, Janlui! Me sirve! También se podría hacer así:

Worksheets("Secuencia_dos").Range("B1").AutoFilter Field:=2, Criteria1:=("C"), Operator:=xlFilterValues

        With Sheets("Secuencia_dos")

            .UsedRange.Sort Key1:=.Columns("D"), Key2:=.Columns("C"), Header:=xlYes
            .Select
   
        End With
 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

Privacy Policy