Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/07/2006, 02:02
Avatar de 3pies
3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 5 meses
Puntos: 144
Prueba esta macro, a ver si es lo que buscas:
Código:
Sub Ordenar()
On Error Resume Next
'Nos posicionamos en cualquier celda del rango de celdas a ordenar
ActiveCell.Activate
   'Si la celda donde estamos, está vacía,
    'nos desplazamos a la línea llamada "sin_orden"
    If Trim(ActiveCell.Value) = "" Then GoTo sin_orden
'Nos desplazamos a la primera celda del rango, siempre y cuando no estemos
'en la primera fila con datos
celda_inicial = ActiveCell.Address
If Trim(ActiveCell.Offset(-1, 0).Value) <> "" Then
    Selection.End(xlUp).Select
    celda_inicial = ActiveCell.Address
End If
'Nos desplazamos a la izquierda, por si estamos en una columna distinta
'de la primera (de la primera del rango que queremos ordenar, no de la primera columna
'de la hoja de cálculo, ya que puede que no queramos ordenar la columna A, por ejemplo).
'Nos desplazamos a la izquierda, solo si el dato de la columna de la izquieda no está vacío,
'ya que si lo está, no será un rango contínuo de celdas
If Trim(ActiveCell.Offset(0, -1).Value) <> "" Then
    Selection.End(xlToLeft).Select
    celda_inicial = ActiveCell.Address
End If
'Ahora que estamos en la primera celda de la izquierda del rango que queremos ordenar,
'seleccionamos todo el rango contínuo de celdas (hasta el final de datos contínuos)
If Trim(ActiveCell.Offset(1, 0).Value) <> "" Then Range(Selection, Selection.End(xlDown)).Select
If Trim(ActiveCell.Offset(0, 1).Value) <> "" Then Range(Selection, Selection.End(xlToRight)).Select
Selection.Sort Key1:=Range(celda_inicial), Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
Exit Sub
sin_orden:
   'Mostramos un mensaje de alerta indicando que no podemos ordenar nada,
    'ya que no hay datos para ordenar
   Mensaje = MsgBox(Chr(13) & "    No estás situado en una celda con datos," & Chr(13) & "    para poder proceder a ordenar el rango.    ", vbOKOnly, "Pues va a ser que no...")
End Sub
Salu2

Última edición por 3pies; 14/07/2006 a las 02:10