¿Cómo verificar la secuencia en una lista de números consecutivos?

Mi objetivo es verificar la secuencia en este listado de números y descartar los números que van atrasados o van adelantados por mucho a la secuencia, espero saberme explicar.( Tal vez con el ejemplo que le estoy enviando me de a entender un poco más) ( ya me había proporcionado una macro anteriormente )

La lista en color verde va en forma correcta tal y como me había ayudado la vez pasada pero llega un momento en el que se corta como podrá ver en la lista en color rojo los números marcados en color rojo son los que debería marcarme incorrectos sin embargo me marca también los números que van consecutivos.( Los puse de verde pero en la columna dos la macro me arroja "MAL")

2 Respuestas

Respuesta
1

La macro revisa hasta un +5 y hasta un -1

En tus datos tienes esto:

303317

El siguiente número más cercano es

303322

¿Por qué? Porque 303317 + 5 = 303322, es por eso que el siguiente número correcto es 303322, de ahí la macro empieza a comparar, cuál es el siguiente número hasta +5 ó hasta -1, y ninguno de los posteriores cumple con la condición.

En tu ejemplo, después del 303317, dices que el 303327 es el siguiente número correcto, pero eso está mal, ya que de 303317 a 303327 hay +10 y la condición es hasta +5.

Una fórmula podría revisar hasta 13 números (anidar 13 condiciones), la macro puede revisar n condiciones.

Podría hacerse con fórmulas, pero quedarían enormes las fórmulas y no serían nada prácticas.

Te pongo un ejemplo con 2 números.

Suponiendo que tus datos empiezan en la celda A1, en la celda B2 pon esta fórmula:

=SI(Y(A2>=A1+1,A2<=A1+5),"","mal")

En la celda B3 pon esta fórmula

=SI(B2="mal",SI(Y(A3>=A1+1,A3<=A1+5),"","mal"),SI(Y(A3>=A2+1,A3<=A2+5),"","mal"))

La fórmula de B3 revisa el número anterior y el anterior al anterior, es decir, solamente 2 números, si quisieras revisar 3 números, tienes que duplicar la fórmula.

La macro revisa n números, tan solo en tu ejemplo revisó 18 números, desde el 303317 hasta que encontró un valor correcto, dentro del rango +5/-1, que fue el número 303322.


E spero que te ayude la explicación. Avísame cualquier duda.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! 

Muchas Gracias Dante!

tenías mucha razón

Solo cambie el rango de +5 a +10 y me resolvió el problema

Gracias por la explicación y por resolver mi dudas tan acertadamente

Saludos!

Respuesta
1

.

Buenos días, Ian

Me parece que está faltando indicar cuál es la tolerancia para los saltos de secuencia. Aún así, cuando encuentra un salto dejaba ese valor como esperando la secuencia continúe pero seguirá siendo mayor que ese límite aunque luego siga un crecimiento como el esperado.

De todos modos, debería haber pintado de rojo esas celdas.

Como no mostraste cuál es la rutina que usas, armé una que hace exactamente lo que solicitas, corrigiendo desde que valor considerar la secuencia luego de esos saltos.

Accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub MarkExced()
'---- Variables modificables ----
'=== IAN, modifica estos datos de acuerdo a tu proyecto:
    IniCelda = "A4" 'celda donde inicia la secuencia de valores
    LimiteOK = 5 ' valor de diferencia entre números para considerar OK
    ColorOK = 4    'verde - Color a dar a la celda si secuencia es correcta
    ColorMal = 3 ' rojo - Color a dar a la celda si secuencia es incorrecta
    TextoMal = "Mal" ' texto a colocar a la derecha de la celda fuera de secuencia
'---- fin Variables
'
'---- inicio de rutina:
'  
UltFila = Range(Left(IniCelda, 1) & Rows.Count).End(xlUp).Row
ElValor = Range(IniCelda).Offset(LaFila).Value
Range(IniCelda).Offset(LaFila).Interior.ColorIndex = ColorOK
For LaFila = 1 To UltFila - Range(IniCelda).Row
With Range(IniCelda).Offset(LaFila)
    If Abs(ElValor - .Value) <= LimiteOK Then
        .Interior.ColorIndex = ColorOK
        ElValor = .Value
    Else
        .Interior.ColorIndex = ColorMal
        Range(IniCelda).Offset(LaFila, 1).Value = TextoMal
        If Abs(Range(IniCelda).Offset(LaFila + 2).Value - Range(IniCelda).Offset(LaFila + 1).Value) <= LimiteOK Then
            ElValor = Range(IniCelda).Offset(LaFila + 1).Value
        End If
    End If
End With
Next
End Sub

Como verás, al inicio del código dejé unas variables para que manejes donde está la lista de números, cual es la tolerancia para considerar la serie correcta y los colores que quieras usar.

Coméntame si mi solución resuelve lo que necesitabas -y, en tal caso, agradeceré que califiques mi contribución- o escribeme de nuevo aquí, si necesitas más apoyo con esto.

Un abrazo

Fernando

.

¡Gracias!

Me fue de mucha ayuda su explicación paso a paso.

Muchísimas gracias por la respuesta es muy útil y la explicación muy acertada

Me fue de mucha ayuda para resolver mi duda

Un abrazo

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas