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.
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
.
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