Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Ordena datos automáticamente

Ordenar datos alfabéticamente o de algún otro modo es algo muy útil cuando se trabaja con listas de nombres, ya sea de personas o artículos, en este ejemplo muestro como se pueden ordenar datos automáticamente al ingresar un nuevo dato, esta macro de Excel o procedimiento de VBA hace que al ingresar un nuevo registro ordene los datos alfabéticamente y en forma automática, a su vez copia los registros en la hoja2, el ejemplo tiene una relación estrecha con el presentado anteriormente ordenar datos e insertar filas mediante macro de VBA, en ese ejemplo se insertan filas entre cada  registro de proveedor y se hace una suma totalizada por proveedor, a su vez se ordena por el criterio proveedor; un poco más avanzado es el ejemplo donde se ordena automáticamente pero en base a varios criterios, a su vez se ordena en forma descendente y no ascendente que es la forma por defecto; también se puede usar un userform para ordenar datos que tiene combobox insertados y seleccionar el dato por el cual  ordenar.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Si somos usuarios de Excel es muy común trabajar con listados y luego querer darles un orden, el ejemplo que puedes descargar desde el link del final, da ese orden y lo que hace mas interesante la macro es que ordena los registros en en forma automática, es decir apenas introduzcamos el registro, la macro actúa y ordena los registros, lo que lo hace más importante aún es que tu no tienes que hacer nada, es decir no te tienes que marcar el rango, la macro sola detecta cual es la última fila y la última columna y en base a ello arma el rango a ordenar y luego procede al ordenamiento, lo que tu tienes que hacer la primera vez es adaptar el rango por cual tu quieres ordenar los datos, pero esto se hace una sola vez cuando adaptas la macro a tu libro.

Desde el link del final se puede descargar el archivo de ejemplo de esta manera podrás ver su funcionamiento en forma más detallada. El código de VBA o Macro de Excel ordena automáticamente un listado, para ello cuando se termina de introducir los datos en la columna D y se da enter, se detecta la modificación de datos en la hoja y se corre la macro, primero se determina cual es la última fila con datos, luego la última columna con datos, separando la letra y número de la columna a través del comando mid; una vez hecho esto ordena los datos armando el rango con los datos obtenidos, por último copia todos los datos ya ordenados en la hoja2.

Esta macro solo toma un criterio de ordenación y en forma ascendente, pero con un par de cambios se puede ordenar usando varios criterios y también en forma ascendente o descendente. En el link del final podrás descargar el ejemplo y adaptarlo a lo que necesites, en resumen la macro ordena en forma automática y alfabética los datos, en el post ordena datos al activar hoja se agrega una variante que el evento que produce que se ejecute la macro es la activación de la hoja.

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo formulario que crea un listado de todas las hojas para poder luego seleccionarlasbuscar en listbox mientras escribes en textboxordenar hojas libro excel por su nombreconectar Excel con Access y muchos ejemplos más.

Código que se debe insertar en Worksheet de la hoja donde haremos correr la macro

Public fila As String
Private Sub Worksheet_Activate()
Sheets(«hoja1»).Cells(fila, 1).Select
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
‘On Error Resume Next

‘solo se ejecuta si se modifica la columna D
If Target.Column = 4 Then
fila = ActiveCell.Row

Dim uf, ucw, r1, r2 As String
Dim x, ucn As Integer

Sheets(«Hoja1»).Select
‘determines last row with data

uf = Sheets(«hoja1»).Range(«A» & Rows.Count).End(xlUp).Row
uc = Sheets(«hoja1»).Cells(«1,» & Columns.Count).End(xlToRight).Address(False, False)
ucw = Mid(uc, 1, 1)
ucn = Sheets(«hoja1»).Cells(«1,» & Columns.Count).End(xlToRight).Column

x = 1

‘will help determine ranges to sort data
k = Sheets(«hoja1»).Cells(2, 1).Address(False, False)
k1 = Mid(k, 1, 1)
r1 = k & «:» & k1 & uf
r2 = «A1:» & ucw & uf
‘sorts the data
 ActiveWorkbook.Worksheets(«hoja1»).Sort.SortFields.Clear
 ActiveWorkbook.Worksheets(«hoja1»).Sort.SortFields.Add Key:=Range(r1) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 With ActiveWorkbook.Worksheets(«hoja1»).Sort
        .SetRange Range(r2)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
 End With

 Cells.Select
 Selection.Copy Destination:=Sheets(«Hoja2»).Range(«A1»)
Sheets(«hoja2»).Select
Sheets(«hoja1»).Select
End If

Application.ScreenUpdating = False
End Sub

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends