Macro para Ordenar por la ultima Columna activa

Esta macro que adjunto Ordena solamente una determinada columnas lo que necesitaría que al agregar una columna más a la base de datos la ordene por esta ultima

A              B            C         D

Ene.       Feb.        Mar.     Abr.

120        150          22/03    500

755          700        200        21/4

500           300         19/03    15/4

Sub Ordenar_Ultima_Columna()

'
Range("A3:C13").Select
Selection.Sort Key1:=Range("C3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A3").Select
End Sub

2 respuestas

Respuesta
1

Intenta con estos cambios

Sub Ordenar_Ultima_Columna()
    Range("A3").CurrentRegion.Select
    Selection.Sort Key1:=(Cells(3, Selection.Columns.Count)), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range("A3").Select
End Sub

Aunque también lo podrías usar así

Sub Ordenar_Ultima_Columna()
    With Range("A3").CurrentRegion
        .Sort Key1:=(Cells(3, .Columns.Count)), _
        Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End With
End Sub

S@lu2

Hola, perdón fue un error mi al no informar que la base de datos tiene en la ultima celda de cada columna la suma total, por ende dicha macro siempre que ordena también la toma.

Le pido si podemos evitar en el ordenamiento esta ultima fila 

  A           B             C             D

 Serv.    Ene.       Feb.        Mar.        Abr.

 Luz         120        150     22/03       500

 Agua      755        700      200         21/4

Gas          500       300     19/03      15/4

Total      1375      1150    200          500

Un pequeño cambio

Sub Ordenar_Ultima_Columna()
    Set r = Range("A3").CurrentRegion
    With Range("A3").Resize(r.Rows.Count - 1, r.Columns.Count)
        .Sort Key1:=(Cells(3, .Columns.Count)), _
        Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End With
End Sub

S@lu2

Respuesta
1

Esta macro establece un rango de datos cada que la corras comprobara cual es la ultima columna sea que quites, sea que añadas, y hara un ordenamiento sobre la ultima columna, la lectura de datos comienza en la celda A1, si tus datos comienzan en otra celda solo cambia esta referencia.

Sub ordenar_ultimacolumna()
Set datos = Range("a1").CurrentRegion
With datos
    col = .Columns.Count
    .Sort key1:=Range(.Columns(col).Address), order1:=xlAscending, Header:=xyles
End With
Set datos = Nothing
End Sub

Hola, perdón fue un error mi al no informar que la base de datos tiene en la ultima celda de cada columna la suma total, por ende dicha macro siempre que ordena también la toma.

Le pido si podemos evitar en el ordenamiento esta ultima fila 

  A           B             C             D

 Serv.    Ene.       Feb.        Mar.        Abr.

 Luz         120        150     22/03       500

 Agua      755        700      200         21/4

Gas          500       300     19/03      15/4

Total      1375      1150    200          500

Es la misma macro solo se le agrega una línea para que ignore los totales.

Sub ordenar_tabla()
Set datos = Range("a1").CurrentRegion
With datos
    filas = .Rows.Count
    col = .Columns.Count
    Set datos = .Resize(filas - 1)
    .Sort key1:=Range(.Columns(col).Address), order1:=xlAscending, Header:=xlYes
End With
Set datos = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas