Hola a tod@s. Haciendo referencia al ejemplo que resolvió Pacomegia al amigo Jesús Martínez sobre como hacer que un ListBox admitiera 14 Columnas, a mi se me plantea ese mismo dilema pero en lugar de Buscar una Fecha determinadas, yo necesito acotar la búsqueda entre Dos fechas ( Fecha Inicial y Fecha Final). Estas fechas se encuentran en la columna A y esa columna de Fechas está ordenada cronológicamente. En mi formulario (muy similar al de Jesús Martine) en lugar de utilizar un Combobox, utilizo un DTPICKER para cada Fecha (Inicial y Final).Lo que no sé es como realizar el codigo para esa busqueda entre esas dos fechas. Tengo dudas de si se podría realizar con la función Find tanto para una como para la otra fecha...
Un saludo
en aquel ejemplo, se buscaba una fecha, para ello se utilizaba "buscar" como si lo hicieses con buscar y reemplazar
rw = .Range(.Cells(i, 6), .Cells(1000000, 6)).Find(CDate(ComboBox2), lookat:=xlWhole).Row
Pero entiendo que lo que quieres ahora no es encontrar una coincidencia exacta, sino todos aquellos valores entre una fecha y otra, supongamos que entre los valores del combobox_fechainicial y el combobox_fechafinal
El problema al detectar esa primera fecha es que puede que no haya un dato exactamente igual a la fecha que indiques (por ejemplo puedes buscar de domingo a domingo, pero sólo tienes datos de lunes a viernes).
Entonces no nos sirve ese Find que utilizábamos antes.
El hecho de tener las fechas ordenadas nos sirve por ejemplo para utilizar la función COINCIDIR
La función coincidir permite encontrar en una lista ordenada la posición de la celda cuyo valor es igual o inmediatamente inferior al valor buscado
Por ejemplo, en este caso, en una fórmula de una celda tendría este aspecto:
=COINCIDIR(fechabuscada;rangoconfechasordenadas;1)
Ese último argumento 1 le indica que queremos la posición del valor menor o igual que lo que estamos buscando.
con esto tendríamos localizada la celda de la primera fecha
en vba sería algo parecido a esto:
posicionfechaanterior=Application.WorkSheetFunction.Match(fechabuscada,rangoconfechasordenadas,1)
Te devuelve la posición dentro del rango seleccionado, no el número de fila
Luego sería ir avanzando fila a fila y comprobando la fecha que tienes en esa fila hasta que sobrepasemos la fecha superior.
Esto tiene el riesgo de que te basas en que los datos estén ordenados, así que debes asegurarte de que realmente lo están para evitar un funcionamiento incorrecto.
------
Ya sé Excel, pero necesito más.
Estoy atascado con el bucle. He utilizado un For. Pero no hay manera.
A groso modo el código sería algo asi:
0=0
For i= 2 to items (donde items es una variable que recoge Toda la tabla de datos)
1er BUCLE: Si Fecha(de la columna de Fechas) >= DTPICKER y Fecha(de la columna de Fechas)<= DTPICKER2 entonces:
2° BUCLE: Si Fecha(de la columna de Fechas) > DTPICKER entonces
LISTBOX. LIST=TRANSPONER (auxMatriz)
ExitSub
FinSI
Redimensiono la matriz (0 yo 11, 0 to X)
auxMatriz (0,X)=Hoja1. Cells (i, 1)
auxMatriz (1,X)=Hoja 1.Cells (i,2)
...Así hasta
auxMatriz (11,X)=Hoja 1.Cells (i,12)
Por último en este bucle:
X=X+1
Fin si
Next i
Cuando el código llega al 2° Bucle len el código pero en el ListBox 1 No aparecen la lista de items. ..
aparentemente este pseudo código está correcto
¿puedes adjuntar el código real para ver si algo no encaja?
------
Ya sé Excel, pero necesito más.
Te dejo el archivo. He cogido la parte de mi aplicación referente al Listbox. Ahora Funciona!!! Peeeero, nosé que Bloque If es el que falla puesto que sólo me muestra los tres primeros registros de la Tabla de datos.
Un saludo y gracias por echarme una mano Paco.