¿Cómo ordenar automáticamente a partir de una fila especifica?

Necesito crear una macro con la función sort para ordenar automáticamente una lista que comienza en la fila M8 de la hoja, de tal modo que cada vez que se añadan datos a la lista, se ordene automáticamente.

2 Respuestas

Respuesta
1

Lo que pides tiene un inconveniente apenas coloques un dato la macro te va a ordenar la información, esta macro ordena la info tomando como base la columna M8, la información en la columna M debe ser la ultima en ser capturada ya que si haces la captura primero en esta columna, la ordenación sera inmediata, copia y pega en el modulo de la hoja donde tengas la información.

Private Sub Worksheet_Change(ByVal Target As Range)
valida = Intersect(ActiveCell, Range("m:m")) Is Nothing
If valida = False Then
    Range("m8").CurrentRegion.Sort key1:=Range("m8"), order1:=xlAscending
End If
End Sub

Muchas gracias!!! funcionó. Si no te molesta, amplio mi necesidad:

La lista tiene su titulo en la fila M6, celda m7 en blanco y los datos a ordenar van desde M8 a M50. Se puede generar una macro con estas especificaciones? si no se puede, ya me arreglo con tu solucion anterior. muchas gracias de nuevo

Dejame te explico la macro esta parte de la instrucción range("m8"). Currentregion le indica a excel que cubra todas las filas y columnas con datos y que se detenga hasta que encuentre una fila o columna vacías, en tu caso cubrirá desde la m8 hasta la m50 y si agregar otra fila por ejemplo m51 o m52 la ira incluyendo sin necesidad que modifiques el código e igual pasara con las columnas, igual pasa si quitas o agregas filas, la instrucción tomara solo lo que queda}e sea más o sea menos, pero si quieres cambiarla por un rango fijo solo cambia range("m8"). Currentregion por esto range("m8:m50").sort...

Respuesta
1

Es de la siguiente manera:

Creamos un modulo:

Sub ordenar()
Dim RangoDatos As Range
Dim CampOrden As Range
Dim UltimaFila As Long
UltimaFila = Sheets("Nombre de la hoja").Range("M" & Rows.Count).End(xlUp).Row
Set RangoDatos = Range("M8:aqui hasta donde se ordenara los datos" & UltimaFila)
Set CampOrden = Range("M8")
RangoDatos.Sort key1:=CampOrden, order1:=xlAscending, Header:=xlYes
End Sub

Ahora en la hoja donde tengas tus datos:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = Aqui numero de columna que sera editada Then
        Call ordenar
    End If
End Sub

En este código debes de colocar el numero de columna que sera editada, una vez que cambies de celda se ordenara automáticamente.

Espectacular! Seguí tus indicaciones sin saber nada de visual basic y funcionó a la perfección!.

Pregunta adicional: Si amplio el rango de columnas con datos, ¿es posible que luego de ordenar por columna "M" ordene por columna "N", por ejemplo?

Set RangoDatos = Range("M8:aqui hasta donde se ordenara los datos" & UltimaFila)

Aquí, si dejaste en M8:M se ordenara solo M, pero si deseas mas amplia tu selección solo coloca la letra desde hasta donde quieres que se ordene automáticamente.

Eso sera todo.

Por ultimo, ¿hay forma de que este código para ordenar funcione en una hoja protegida? Porque en hoja protegida me aparece error 1004 de visual basic

Puedes ver la contraseña que tenga la hoja, haz lo siguiente:

Presiona Alt+F8, coloca un nombre, clic en crear y pega este código:

Una vez pegado dale play, botón verde arriba a la izquierda, te desbloqueara y mostrara el código de esta.

No olvides puntuar.

Por alguna razón no puedo adjuntar el código al mensaje, lo adjunto en un documento de GD.

https://docs.google.com/document/d/1zGkZ2if2WFoqe5EI0Ok3sYBe2-6_98V5qxDeBeSXPLk/edit?usp=sharing

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas