Saltar al contenido

Macro VBA Ordenar por varias columnas


.

✅Macro de Excel para ORDENAR por Varias Columnas

El tema de ordenar datos ha sido desarrollado en otros post anteriores, en ese se muestra como ordenar datos en base a varias columnas y con criterio ascendente y descendente, esta macro de Excel o procedimiento de VBA ordena los datos en base a tres columnas, el ejemplo tiene una relación estrecha con el presentado anteriormente ordenar datos e insertar filas mediante macro de VBA ordenar datos al activar hoja, 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 en base a varias columnas, 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.

Te recomiendo el siguiente libro para manejar Excel en forma eficiente, 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, te lo recomiendo no te arrepentirás.

  

Como funciona el ejemplo de Macro Para Ordenar Datos en Excel

En el presente ejemplo de macro o código de VBA permite ordenar los datos por las columnas J en un primero momento en forma descendente, luego ordena por la columna C en forma ascendente y por último por la columna H en forma ascendente, para ver su funcionamiento descarga el ejemplo desde el link del final.

Lo importante de esta macro es que automáticamente se detecta el rango a con datos y arma el rango de datos a ordenar; en este ejemplo se tomo que el listado a ordenar tiene encabezado, si la planilla que se desea ordenar no tuviera encabezado se debe modificar el siguiente código

.Header=xlYes

por este otro código

.Header=xlNo

Modificando este código se tendrá en cuenta o no el encabezado, dependerá del listado que queramos ordenar si este cuenta con dicho encabezamiento o no, que por lo general lo tienen para determinar que datos son registrados en tal o cual campo.

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.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

Desde el link del final podrás  bajar el archivo de ejemplo y adaptarlo a tus necesidades, se debe descargar el archivo comprimido y descomprimir en la PC se bajan dos archivos uno que contiene la macro y otro de donde se extraen los datos, se debe seleccionar ese archivo ya que en la columna A contiene los datos necesarios ya que es la que se utiliza para llenar el combobox con los datos; para adaptar este archivo se debe tener presente la columna de donde se obtienen los datos; llenar un combobox con datos de otro libro, es algo que se usa bastante por eso fue el motivo del post, el código se encuentra abierto y sin ningún tipo de restricción para su adaptación.

Código que se inserta en un módulo


Sub OrdenaPorVariasColumnas()
Dim pf, uf As Integer
Dim uc, wc, r, r1, r2, r3, b As String
‘determines last row with data
b = ActiveSheet.Name
pf = 2
uf = Sheets(b).Range(«A» & Rows.Count).End(xlUp).Row
uc = Sheets(b).Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
r = wc & pf & «:» & wc & uf
r1 = ActiveSheet.UsedRange.Address(False, False)
r2 = «C» & pf & «:C» & uf
r3 = «H» & pf & «:H» & uf
‘r1 = «A» & pf & «:» & wc & uf
‘sorts the data
 ActiveWorkbook.Worksheets(b).Sort.SortFields.Clear
 ActiveWorkbook.Worksheets(b).Sort.SortFields.Add Key:=Range(r) _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
 ActiveWorkbook.Worksheets(«Hoja1»).Sort.SortFields.Add Key:=Range(r2) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 ActiveWorkbook.Worksheets(«Hoja1»).Sort.SortFields.Add Key:=Range(r3) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

 With ActiveWorkbook.Worksheets(b).Sort
        .SetRange Range(r1)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
 End With
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