Formulario ordena por varias columnas






Trabajar con Excel en muchas ocasiones implica tener que Ordenar datos por algún criterio para contar con un cierto orden para poder trabajar con ellos, esta macro de Excel o procedimiento de VBA presenta un formulario que solicita la columnas por las cuales la macro ordenará los datos, es decir varias columnas.

Si estás viendo este ejemplo quizás te sirvan los presentados anteriormente como 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 consultar   userform para ordenar datos que tiene combobox que permite seleccionar el dato por el cual  ordenar, también se presentó una versión que ordena datos en base a varias columnas, la diferencia de este con el ejemplo actual, es que no se presenta un formulario para elegir las columnas, sino que directamente estás están programadas en el código, que se debería adaptar a la columna que se necesite 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.

  

En el presente ejemplo de macro o código de VBA denominado formulario que ordena por varias columnas, presenta al inicio un formulario que solicita que se ingresen hasta tres columnas por las cuales se ordenarán los datos, es decir se puede ingresar una, dos o tres columnas, demás está decir que se puede modificar la macro y asignar más criterios de búsqueda.

Los datos se ordenan en forma descendente para la primer columna seleccionada y ascendente para las otras dos columnas, el rango se determina automáticamente ya que las variables seleccionan el rango donde se encuentran todos los datos del rango usado.


Desde el link del final podrás bajar el archivo de ejemplo y adaptarlo a tus necesidades, existe un ejemplo presentado anteriormente que es un formulario que permite seleccionar el título de la columna por la cual ordenar, como así también si se requiere en forma ascendente o descendente, sugiero que lo veas ya que es más complejo en cuanto a su programación, el código que verás en el ejemplo es el que se agrega a continuación, demás está decir que este como todos los ejemplos presentados en está página tienen su código abierto y sin restricción para su uso particular.

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 inserta en un módulo




 Sub ir()
 UserForm1.Show
 End Sub


Código que se inserta en un userform

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim pf, uf As Integer
Dim uc, wc, r, r1, r2, r3, b, tb1, tb2, tb3 As String
'determines last row with data
tb1 = TextBox1
tb2 = TextBox2
tb3 = TextBox3
Unload Me
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

r1 = ActiveSheet.UsedRange.Address(False, False)

r = tb1 & pf & ":" & tb1 & uf
r2 = tb2 & pf & ":" & tb2 & uf
r3 = tb3 & pf & ":" & tb3 & uf

'sorts the data
 ActiveWorkbook.Worksheets(b).Sort.SortFields.Clear

 If tb1 <> Empty Then
 ActiveWorkbook.Worksheets(b).Sort.SortFields.Add Key:=Range(r) _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
 End If

 If tb2 <> Empty Then
 ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range(r2) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 End If

 If tb3 <> Empty Then
 ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range(r3) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 End If

 With ActiveWorkbook.Worksheets(b).Sort
        .SetRange Range(r1)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
 End With

MsgBox ("Los datos se ordenaron correctamente por la columna " & tb1 & ", columna " & tb2 & " y columna " & tb3), vbInformation, "AVISO"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Private Sub CommandButton2_Click()
Unload Me
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