Como ordenar columna de rango variable

Grabe una macro y no se como hacer el rango variable en al parte donde dice
SetRange range ("A1:M17")
La macro grabada es esta:
Sub Ordenar_responsable2()
'
' Ordenar_reponsable2 Macro
Columns("I:I").Select
ActiveWorkbook.Worksheets("BASEGENE").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BASEGENE").Sort.SortFields.Add Key:=Range("I1").End(xlDown), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BASEGENE").Sort
.SetRange Range("A1:M17")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub
{"lat":19.6471142871063,"lng":-99.3349456787109}
3

3 Respuestas

26.050 pts. Tengo experiencia en macros, funciones avanzadas y algo...
Q+ Latoso,
Prueba cambiendo tu código por este otro:
Sub Ordenar()
'
' Ordenar Macro
' Macro grabada el 03/09/2008 por Richard Chacón
Range("A1:I2900").Sort Key1:=Range("I2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub
Antes que nada muchas gracias por tu respuesta y amplios reconocimientos a ti y a esta página, por otro lado
La tabla que utilizo va del rango A1 a M1, y observo que el rango que tiene el código es de A1:I2900, lo que sucede que combino el código que te di con otras macros que tienen el mismo código fijo .set range range(A1:M17), por lo que tu código me marca error y ademas se manejan varias hojas, ¿se podría modificar el código que te di en la parte puntualizada, y aplicar ese cambio a las demás macros?
Q+ Latoso,
Prueba con este código:
Sub Ordenar()
'
' Macro1 Macro
' Macro grabada el 05/09/2008 por Richard Chacón
ActiveCell.Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Sub Ordenar_Rangovariable()

Range("E19").Select
Range(Selection, Selection.End(xlDown)).Select

ActiveWorkbook.Worksheets("Hoja2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Hoja2").Sort.SortFields.Add Key:=Range(Selection, Selection.End(xlDown)) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Hoja2").Sort
.SetRange Range(Selection, Selection.End(xlDown))
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("E19").Select
End Sub

58.575 pts. Si de mis mayores gustos, mis disgustos han nacido,...

Pruebe esta macro, funciona para cualquier hoja ordenando la informacion en forma ascendente tomando como referencia la columna i

Sub ordenar()
Set h = Worksheets("basegene")
Set datos = Range("a1").CurrentRegion
With datos
    columna = Range("i1").Column
    .Sort key1:=h.Range(.Columns(columna).Address), order1:=xlAscending
End With
End Sub

Una disculpa a la macro anterior le hice un cambio que no se reflejo al momento de subirla, esta es la amcro que ocupas

Sub ordenar()
Set h = Worksheets(ActiveSheet.Name)
Set datos = Range("a1").CurrentRegion
With datos
    columna = Range("i1").Column
    .Sort key1:=h.Range(.Columns(columna).Address), order1:=xlAscending
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas