encontrar sin bucles 1er nro que falte en serie

13/09/2007 - 01:47 por Ivan | Informe spam
hola a todos de nuevo,

sabeis como puedo buscar [via codigo] la primera ocurrencia que falte
[en una columna] en una serie numerica consecutiva (y claro, sin
repeticiones)

con bucles no creo que tenga ningun problema, pero si la lista es
larga y como el proceso ya va englobado con otros cuantos, podria
suponer una demora añadida

supongo que debe haber alguna funcion de hoja (CountIf pej????) que se
pueda aplicar para agilizar el proceso, pero no se me ocurre cual ni
como

si teneis alguna idea os lo agradezco

un saludo
Ivan
 

Leer las respuestas

#1 Héctor Miguel
13/09/2007 - 04:10 | Informe spam
hola, Ivan !

... como puedo buscar [via codigo] la primera ocurrencia que falte [en una columna]
en una serie numerica consecutiva (y claro, sin repeticiones)
con bucles no creo que tenga ningun problema, pero si la lista es larga
y como el proceso ya va englobado con otros cuantos, podria suponer una demora a#adida
supongo que debe haber alguna funcion de hoja (CountIf pej????)
que se pueda aplicar para agilizar el proceso, pero no se me ocurre cual ni como...



[en tanto *encontramos* alguna forma mas... *universal*/eficiente/...] :D

[hasta donde se] excel *acostumbra* resolver +/- rapido este tipo de consultas [en hoja de calculo] con formulas matriciales
solo que no son muy *apropiadas* para administrar columnas completas :-((
si comparas el *salto* de numeracion en dos *grupos* de un rango especifico [es decir]:
1er grupo: desde la primera hasta la penultima del rango
2do grupo: desde la segunda hasta la ultima del rango

si suponemos que el rango con la numeracion que debiera ser consecutiva es 'B2:B36'
la siguiente formula matricial te devuelve la posicion de la celda donde NO se cumple el *salto* de uno en uno:
=coincidir(falso,b2:b35³:b36-1,0)+1

dado que vba no puede *asimilar* el uso de formulas matriciales [al menos, hasta donde se]...
puedes aprovechar la funcion Evaluate("texto de la formula") +/- como sigue:

Sub Salto_en_consecutivo()
Dim Salto
Salto = Evaluate("match(false,b2:b35³:b36-1,0)+1")
If IsError(Salto) Then
MsgBox "No hay saltos en el consecutivo numerado."
Else
MsgBox "Existe un salto en el consecutivo " & Salto
End If
End Sub

[obviamente] el *truco* esta en *construir* las variables de texto para los dos grupos en el mismo rango
rango: 'B2:B36'
gpo 1: 'B2:B35'
gpo 2: 'B3:B36'

saludos,
hector.

Preguntas similares