Excel VBA para filtrar y ordenar datos
Desactivación de filtros
Cuando se trabaja en una base de datos Excel es posible que desee asegurarse de que todos los filtros estén desactivados. Para ello se iniciará el proceso con dos "if". Por ejemplo, con una base de datos a partir de la celda A1 ejecutaremos 2 sentencias:
Range("A1" ).Select
If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
Ordenar los datos
Ejemplos:
- La siguiente macro de Excel funciona con cualquier tamaño de base de datos a partir de la celda A1 y funcionará en cualquier versión de Excel (1997 a 2010).
Sub proFilter()
Range("A1").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes
End Sub
- Ordenar datos, considerando tres campos diferentes.
Sub proFilter()
Range("A1").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range( _ "B2"), Order2:=xlAscending, Key3:=Range("C2"), Order3:=xlAscending, _ Header:=xlYes
End Sub
Ejercicio.
- Aplicaremos el ordenamiento de datos por familias y sub-familias.
(Para mayor visualización de la imagen, hacer click en la misma)
Por: MARIA ANTONIETA VALENZA COLLADO
17/01/2014 a las 9:33 am
Hola desde ya muchas gracias, logre ordenar mis datos con este método en la hoja1, en la hoja2 tengo los mismos datos convinados a la h1 pero con otros tipos de datos asociados, hay alguna manera de que al cambiar los datos en la h1, en la hoja2 tambien se ordenen con su rango de celdas asociadas. O sea, detectar el cambio en la hoja2 y ordenar todo el rango ese. Desde ya muchas gracias
23/04/2014 a las 10:44 pm
Exelente!! Muchas gracias, es un codigo util, simple y efectivo.
10/06/2014 a las 11:33 am
Perfecto!!! muchas gracias.
04/09/2014 a las 9:32 am
gracias.........
25/08/2015 a las 7:54 am
excelente. Gracias por aportar tus conocimientos, que a tantos nos ayudan.
21/09/2015 a las 7:53 am
Gracias por el ejemplo !!, frente a eso me sale una duda, si quisieras que se ordenaran los datos, pero necesitas que un producto en especifico quede arriba o abajo como lo harías?. Pregunto esto porque en el trabajo que estoy realizando el rango de datos que hay para ordenar puede variar y necesito que si se ingresa un producto en especifico este quede en el tope del rango.
Esperando una pronta respuesta
De antemano gracias !!
04/12/2015 a las 1:54 pm
Que lineas de codigo mas simple.. excelente funcionamiento, me ahorro muchas lineas innecesarias.
20/01/2017 a las 10:56 pm
buena noche segui sus consejos los cuales agradesco y logre que se ordenaran los datos en forma ascendente correctamente, pero al hacerlo en forma descendente la macro toma los renglones en blanco y coloca los datos al final de la lista.
dejo las instrucciones por si me hacen el favor de ayudarme.
Sub ordenar()
Dim rangoDatos As Range
Dim campoOrden As Range
Dim ultimaFila As Long
ActiveSheet.Unprotect Password:="xxx"
ultimaFila = Sheets("SVP").Range("C" & Rows.Count).End(xlUp).Row
Set rangoDatos = Range("C3:BK" & ultimaFila)
Set campoOrden = Range("bk3")
rangoDatos.Sort key1:=campoOrden, order1:=xlAscending, Header:=xlnot
ActiveSheet.Protect ("xxx")
End Sub
si me dan la solución al correo estare agradecido
por su atención gracias
23/02/2017 a las 3:03 am
El tema es el siguiente.
Tengo 50 trabajadores y tengo que averiguar la preferencia para poder irse de vacaciones en una época, dividido en tres turnos. Y mi norma es que:
Tienen preferencia los que no hayan disfrutado el turno en el último año, en igual de condiciones se mira el año anterior, en ingual de condiciones el anterior y así sucesivamente hasta cinco años antes.
Cada trabajador puede solicitar sus preferencias de disfrute por orden en el que desearía disfrutar esas vacaciones.
Me sería mucho más fácil si pudiera ponerte un ejemplo con una hoja. Como podría hacértela llegar?
03/07/2019 a las 5:10 am
Muchas gracias!
06/09/2019 a las 9:39 am
Buenos dias a ver si alguien me puede ayudar, se que lo que voy a pedir lo hacen los filtros de las tablas, pero me gustaria poder crear un boton supongamos que en la cel F8 y en la celda F9 escriba la palabra que quiero buscar, la idea es que al escribir la palabra me ordene el listado en funcion a la palabra que escriba en la celda F9... he estado buscando ejemplos de macros y no he obtenido resultado. La cuestion es en la lista dordenada por ejemplo me pongan monagas todas juntas.
07/01/2020 a las 6:41 am
Muchas gracias!!!
14/03/2020 a las 12:34 am
Este algoritmo de ordenamiento es Super bueno:
Range("A1").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes
Pero como puedo hacer si de cabecera tengo 02 filas de títulos; en lugar de 01. Ya que lo pruebo con una sola fila como titulo y perfecto; pero con 02 filas no funciona, ya que la 2º fila la toma como dato y la ordena. Muchas gracias por la respuesta, y felicitaciones por brillantes iniciativas.