"Tengo una columna con registros y necesito generar una lista desplegable con dichos registros y en el mismo orden que aparecen en el listado original. El problema es que existen celdas en blanco y, en consecuencia, me aparecen dichos espacios en la lista desplegable".
Partimos del siguiente ejemplo:
En C2 queremos crear una lista desplegable con validación de datos, que presente los distintos códigos existentes en el rango E3:E20, en el mismo orden, pero sin los espacios en blanco. Lo primero que hacemos es generar un número de orden en la columna G (a partir de G3) del 1 al 18. En la celda H3 escribimos =E3 y copiamos hasta la celda H20, para generar un "espejo" de los códigos originales:
Lo que vamos a hacer a continuación es "reordenar" estos códigos dándoles un nuevo número de orden. Para ello nos ponemos en la celda I3 y escribimos la fórmula:
=SI(H3=0;MAX($G$3:$G$20)+1;G3) y la copiamos hasta I20.
Cunado el valor de la celda es 0 le estamos pidiendo que calcule el máximo de nuestro lista de orden (en nuestro ejemplo es 18) y le sume 1. De esta manera, todas las celdas en blanco de nuestra listado original de códigos, pasará a tener un nuevo número de orden que, en nuestro ejemplo, será de 19 (18+1). En el caso de que el valor de la celda no sea 0, le pedimos que escriba el valor número de orden que le corresponde a dicho código. Esto nos servirá para "reordenar" a continuación la información manteniendo el orden original pero evitando las celdas en blanco:
Ya sólo nos queda "recolocar" de menor a mayor estos nuevos números de orden y obtener el código correspondiente. Nos situamos en J3 y escribimos:
=SI.ERROR(BUSCARV(K.ESIMO.MENOR($I$3:$I$20;G3);$G$3:$H$20;2;FALSO);"X")
K.ESIMO.MENOR nos reordena de menor a mayor los números que hemos obtenido en el rango I3:I20. Al anidar esta función dentro de BUSCARV lo que hacemos es obtener el código relacionado con el número de orden. Finalmente, anidamos dentro de SI.ERROR para que aquellos valores que no se encuentran dentro de la tabla de búsqueda (en concreto el valor 19, que se corresponde con las celdas en blanco) no devuelvan el valor de error #N/A y se conviertan en X:
Ya sólo nos queda crear la fórmula en la validación de datos. Seleccionamos el rango J3:J20 y le creamos el nombre Listado. Desde C2 vamos a Validación de datos. En "Permitir" seleccionamos Lista y escribimos la siguiente fórmula:
=DESREF(J3;0;;CONTAR.SI(listado;"<>X"))
De esta manera obtendremos nuestra lista desplegable, manteniendo el mismo orden que el listado original, sin incluir ninguna fila en blanco: