BúsquedaV sin orden
Resuelto
Usuario anónimo
-
Usuario anónimo -
Usuario anónimo -
Hola,
Me intriga esta pregunta. Cuando me enseñaron la función BuscarV, me dijeron que los datos de la primera columna deben estar absolutamente ordenados. Además, he visto algunas preguntas en foros que dicen que no pueden usar la función sin que los valores estén ordenados.
Sin embargo, si se indica "FALSO" en el último argumento de la función, no es necesario ordenar la lista. De hecho, la ayuda de Excel lo aclara:
"Si el argumento valor_cercano es FALSO, no es indispensable que los valores de la primera columna de la tabla_matriz estén ordenados."
Entonces, me gustaría saber si puedo confiar en esto y usar la función sin que mi lista esté ordenada. ¿Ha tenido problemas antes? Hasta ahora no he tenido problemas, los valores mostrados son correctos. Sin embargo, no quiero encontrarme con un error más adelante, especialmente en el archivo de uno de mis clientes.
Gracias por tranquilizarme :)
Configuración: Windows 7 / Chrome 31.0.1650.63
Me intriga esta pregunta. Cuando me enseñaron la función BuscarV, me dijeron que los datos de la primera columna deben estar absolutamente ordenados. Además, he visto algunas preguntas en foros que dicen que no pueden usar la función sin que los valores estén ordenados.
Sin embargo, si se indica "FALSO" en el último argumento de la función, no es necesario ordenar la lista. De hecho, la ayuda de Excel lo aclara:
"Si el argumento valor_cercano es FALSO, no es indispensable que los valores de la primera columna de la tabla_matriz estén ordenados."
Entonces, me gustaría saber si puedo confiar en esto y usar la función sin que mi lista esté ordenada. ¿Ha tenido problemas antes? Hasta ahora no he tenido problemas, los valores mostrados son correctos. Sin embargo, no quiero encontrarme con un error más adelante, especialmente en el archivo de uno de mis clientes.
Gracias por tranquilizarme :)
Configuración: Windows 7 / Chrome 31.0.1650.63
4 respuestas
-
Hola.
Utilizo diariamente esta función con el argumento falso en datos no ordenados, y nunca ha habido un error. -
Hola,
Para mí, los datos no deben ordenarse.
Creo que la cuestión del orden se plantea si alguna vez tu valor buscado aparece varias veces.
Ya lo he utilizado en listas no ordenadas y funciona muy bien. -
Hola,
BUSCARV(código; tabla; ColumnaResultado; Verdadero o falso)
Si el valor buscado es un código y si la tabla NO está ordenada
Es necesario especificar el parámetro FALSO.
Se obtiene #N/A si el código no existe.
Si el valor buscado es un código y si la tabla está ORDENADA,
se puede especificar el parámetro VERDADERO.
La búsqueda se realiza entonces por DICOTOMÍA y puede ser x100 + RÁPIDO ya que solo se requieren algunos accesos para encontrar el código. Esto es MUY IMPORTANTE cuando la tabla es de gran tamaño y que
la fórmula BUSCARV() se copia x1000 veces (Con FALSO, Excel consulta la tabla SECUENCIALMENTE).
Para verificar si el código existe (no se recupera #N/A sino el valor inferior), hay que escribir:
=SI(BUSCARV(CódigoBuscado; Artículos; 1; VERDADERO)=
CódigoBuscado; BUSCARV(CódigoBuscado; Artículos; 2; VERDADERO);"Desconocido")
Si la tabla está ordenada por código y el código existe varias veces, BUSCARV(código; tabla; Col_Resultado; VERDADERO) se posicionará sobre el último código.
Jacques Boisgontier -
>Entonces, si entiendo bien, si utilizo la función BuscarV con una tabla no ordenada con varios valores (como 20,000), ¿podría ser lento?
Si solo hay una fórmula BuscarV(), no hay problema.
Si en cambio, copiamos esta fórmula 1000 veces, habrá un tiempo de espera.
En este caso, utiliza:
Función personalizada RechvM() matricial más rápida que BuscarV() clásico
Si modificamos los 2,600 valores que buscamos en una tabla de 20,000 elementos,
el tiempo de recálculo no es visualmente medible (5 seg para BuscarV())
-Seleccionar G2:G2673
=RechvM(F2:F2673;matable;2)
-Validar con mayús+ctrl+entrada
En un módulo
Alt+F11/Insertar módulo
Function RechvM(clave As Range, campo As Range, colResultado)
Application.Volatile
Set d = CreateObject("Scripting.Dictionary")
a = campo.Value
b = clave.Value
For i = LBound(a) To UBound(a)
d(a(i, 1)) = a(i, colResultado)
Next i
Dim temp()
ReDim temp(LBound(b) To UBound(b))
For i = LBound(b) To UBound(b)
temp(i) = d(b(i, 1))
Next i
RechvM = Application.Transpose(temp)
End Function
Jacques Boisgontier