[Resuelto] macro auto filtro de fechas en dos columnas
[Resuelto] macro auto filtro de fechas en dos columnas
saludos
estoy a días tratando de construir una macro para Auto Filtro automático de intervalo de fechas en dos columnas diferentes en la misma hoja de cálculo
por ejemplo:
la hoja de cálculo1 tiene 5000 líneas, la columna A y la columna F contiene Fechas
es necesario filtrar en la columna A el intervalo de fechas entre 15/01/2008 hasta 20/12/2015 y en la columna F preciso filtrar el intervalo de fechas entre 10/03/2008 hasta 25/12/2010
es necesario ser a través de macro y necesita hacer los dos filtros juntos en la misma macro
he intentado varios ejemplos de los foros, pero ningún ejemplo es parecido a mi problema.
abrazos
estoy a días tratando de construir una macro para Auto Filtro automático de intervalo de fechas en dos columnas diferentes en la misma hoja de cálculo
por ejemplo:
la hoja de cálculo1 tiene 5000 líneas, la columna A y la columna F contiene Fechas
es necesario filtrar en la columna A el intervalo de fechas entre 15/01/2008 hasta 20/12/2015 y en la columna F preciso filtrar el intervalo de fechas entre 10/03/2008 hasta 25/12/2010
es necesario ser a través de macro y necesita hacer los dos filtros juntos en la misma macro
he intentado varios ejemplos de los foros, pero ningún ejemplo es parecido a mi problema.
abrazos
Última edición por physic el Lun Nov 19, 2018 4:33 pm, editado 1 vez en total.
LibreOffice 5.4.4.2 >>> Windows 7
Re: macro auto filtro de fechas en dos columnas
Buenas!
Vuelvo a contestar algo en lo que no controlo nada, y eso es indicativo de que si yo he sido capaz, seguramente tú con alguna búsqueda y un poco de empeño, también eres capaz de conseguirlo (todo ello contando con que funcione en tu hoja de trabajo. En mi hoja de ejemplo me parece que sí que funciona, pero mis resultados son para congerlos con pinzas)
Supongo que está bien para funcionar, sólo falta hacer las pruebas correspondientes y cruzar los dedos, no vaya a ser que todo reviente.
Un saludo!
Vuelvo a contestar algo en lo que no controlo nada, y eso es indicativo de que si yo he sido capaz, seguramente tú con alguna búsqueda y un poco de empeño, también eres capaz de conseguirlo (todo ello contando con que funcione en tu hoja de trabajo. En mi hoja de ejemplo me parece que sí que funciona, pero mis resultados son para congerlos con pinzas)
Código: Seleccionar todo
sub filtra_Fechas()
Dim xRange as object
Dim FilterDesc as Object
Dim FilterFields(3) as new com.sun.star.sheet.TableFilterField
xRange = thiscomponent.getcurrentcontroller.activesheet.getCellRangeByName("A2:F100")
FilterDesc = xRange.createFilterDescriptor(true)
FilterDesc.ContainsHeader = false
FilterFields(0).Field = 0
FilterFields(0).IsNumeric = true
FilterFields(0).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(0).NumericValue = CLng(CDate("15/01/2008"))
FilterDesc.ContainsHeader = false
FilterFields(1).Field = 0
FilterFields(1).IsNumeric = true
FilterFields(1).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(1).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(1).NumericValue = CLng(CDate("20/12/2015"))
FilterFields(2).Field = 5
FilterFields(2).Connection = com.sun.star.sheet.FilterConnection.OR
FilterFields(2).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(2).IsNumeric = True
FilterFields(2).NumericValue = CLng(CDate("10/03/2008"))
FilterDesc.ContainsHeader = false
FilterFields(3).Field = 5
FilterFields(3).IsNumeric = true
FilterFields(3).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(3).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(3).NumericValue = CLng(CDate("25/12/2010"))
FilterDesc.SetFilterFields(FilterFields)
xRange.Filter(FilterDesc)
End Sub
Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Libreoffice 6.4.2, en Windows 10
Re: macro auto filtro de fechas en dos columnas
sr. Longi
hice un modelo para probar su código, pero parace que no funcionó correctamente como necesitaba funcionar
sigue el modelo adjunto para análisis
abrazos
hice un modelo para probar su código, pero parace que no funcionó correctamente como necesitaba funcionar
sigue el modelo adjunto para análisis
abrazos
- Adjuntos
-
- filter fechas.ods
- (38.66 KiB) Descargado 230 veces
LibreOffice 5.4.4.2 >>> Windows 7
Re: macro auto filtro de fechas en dos columnas
Buenas!
Creo que el problema está en las referencias (yo hice la búsqueda para la primera columna, empezando por la letra A, y además puse solo 50 filas).
Mira a ver con estas modificaciones si se adaptan a lo que se necesita:
Ya nos cuentas.
Un saludo!
Creo que el problema está en las referencias (yo hice la búsqueda para la primera columna, empezando por la letra A, y además puse solo 50 filas).
Mira a ver con estas modificaciones si se adaptan a lo que se necesita:
Código: Seleccionar todo
sub filtra_Fechas()
Dim xRange as object
Dim FilterDesc as Object
Dim FilterFields(3) as new com.sun.star.sheet.TableFilterField
xRange = thiscomponent.getcurrentcontroller.activesheet.getCellRangeByName("B2:B5000")
FilterDesc = xRange.createFilterDescriptor(true)
FilterDesc.ContainsHeader = false
FilterFields(0).Field = 0
FilterFields(0).IsNumeric = true
FilterFields(0).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(0).NumericValue = CLng(CDate("15/01/2008"))
FilterDesc.ContainsHeader = false
FilterFields(1).Field = 0
FilterFields(1).IsNumeric = true
FilterFields(1).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(1).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(1).NumericValue = CLng(CDate("20/12/2015"))
FilterFields(2).Field = 4
FilterFields(2).Connection = com.sun.star.sheet.FilterConnection.OR
FilterFields(2).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(2).IsNumeric = True
FilterFields(2).NumericValue = CLng(CDate("10/03/2008"))
FilterDesc.ContainsHeader = false
FilterFields(3).Field = 4
FilterFields(3).IsNumeric = true
FilterFields(3).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(3).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(3).NumericValue = CLng(CDate("25/12/2010"))
FilterDesc.SetFilterFields(FilterFields)
xRange.Filter(FilterDesc)
End Sub
Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Libreoffice 6.4.2, en Windows 10
Re: macro auto filtro de fechas en dos columnas
En la columna B funcionó perfecto
Pero en la columna F no funcionó
abrazos
Pero en la columna F no funcionó
abrazos
LibreOffice 5.4.4.2 >>> Windows 7
Re: macro auto filtro de fechas en dos columnas
sr. Longi
comando OR por el comando AND y funcionó correcto
gracias por su ayuda
abrazos
comando OR por el comando AND y funcionó correcto
gracias por su ayuda
abrazos
LibreOffice 5.4.4.2 >>> Windows 7
Re: [Resuelto] macro auto filtro de fechas en dos columnas
Buenas de nuevo!
Pudiera ser que todo esté mal, pero quisiera pensar que no es así, que simplemente es una mala lectura del primer mensaje por mi parte.
En la estructura de la macro hay cuatro bloques de filtro, y en los tres últimos aparecen los operadores lógicos 'AND' y 'OR'.
En función de cómo los pongas tendrás una cantidad de registros u otra.
Lo que yo intenté era que quedasen todos los registros filtrados entre los dos primeros bloques de filtro de la macro (primera columna), y después, si del segundo grupo (dos bloques del final de la macro) que afectan a la segunda columna tuviese algún registro que originalmente no fuese filtrado en la primera columna, también aparecería en el resultado final.
Jugando con los 'AND' y 'OR' he tenido estos totales de registros para el ejemplo propuesto:
AND+AND+AND= 142 registros
AND+AND+OR= 271 registros
AND+OR+AND= 239 registros
OR+AND+AND= 468 registros
Haz pruebas a ver cual es lo que quieres que te salga.
Si no te termina de funcionar apórtanos el conjunto de resultados que querrías que saliese con los datos del ejemplo que ya tenemos (o con otro diferente), a ver si arreglamos algo.
Otro saludo!
Pudiera ser que todo esté mal, pero quisiera pensar que no es así, que simplemente es una mala lectura del primer mensaje por mi parte.
En la estructura de la macro hay cuatro bloques de filtro, y en los tres últimos aparecen los operadores lógicos 'AND' y 'OR'.
En función de cómo los pongas tendrás una cantidad de registros u otra.
Lo que yo intenté era que quedasen todos los registros filtrados entre los dos primeros bloques de filtro de la macro (primera columna), y después, si del segundo grupo (dos bloques del final de la macro) que afectan a la segunda columna tuviese algún registro que originalmente no fuese filtrado en la primera columna, también aparecería en el resultado final.
Jugando con los 'AND' y 'OR' he tenido estos totales de registros para el ejemplo propuesto:
AND+AND+AND= 142 registros
AND+AND+OR= 271 registros
AND+OR+AND= 239 registros
OR+AND+AND= 468 registros
Haz pruebas a ver cual es lo que quieres que te salga.
Si no te termina de funcionar apórtanos el conjunto de resultados que querrías que saliese con los datos del ejemplo que ya tenemos (o con otro diferente), a ver si arreglamos algo.
Otro saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Libreoffice 6.4.2, en Windows 10