Saltar al contenido

Ruptura de rachas en una serie de dos valores repetidos


shadowjuan

Recommended Posts

publicado

¡Cuánto tiempo sin pasarme por aquí! Es buena señal, ya que me voy arreglando solito :)

Hola a todos,

Estoy elaborando una tabla en la cual van a aparecer dos valores, a y b (tal cual, estos dos caracteres) en varias celdas de cada fila (por ahora, la fila 1), aleatoriamente, y pudiendo haber huecos (celdas vacías) entre valores. Es decir, que yo tengo un carácter POR CELDA y, además, posibles huecos, tal que 5 caracteres ocuparían 5 celdas, a razón de 1 carácter por celda. Y con huecos, a veces, que no hacen más que molestar :D Podría quedar algo así, cada carácter en su celda respectiva de la fila 1:

a _ a b a* _ _ _ a _ a b b b a ... (hasta 31 casillas, y siendo _ celda vacía)

Tal y como pongo en el archivo adjunto, la idea es poder contar las veces que el carácter "a" cambia a "b" o al revés ("romper la racha"), incluso si hay celdas vacías -que no siempre- entre medio de esos caracteres, en cada fila. En el ejemplo que he inventado arriba hay, ignorando espacios (se deben ignorar, son "nulos"), un total de 4 rupturas, las he subrayado. Las cadenas iguales "a a a" cuentan como si fueran un único grupo, incluso con espacios. La marcada con * es que hay dos juntas (ab, y ba)

Puede que os sea más fácil imaginarlo con una ruleta: apuesto al rojo, rojo, negro (¡ruptura de racha!), negro, negro, negro, rojo (¡ruptura de racha!), etc., y quiero contar esas variaciones en los resultados.

Me es fácil comparar una celda y su adyacente y ver si existe esta ruptura de serie o racha:


sub contar_racha
racha=0 'Inicio la macro poniendo a cero el contador, y que no dé error si no hay rupturas (todo puede ser)
for i=1 to 30 'Por ejemplo, para las 30 primeras columnas
if cells(1, i)="a" and cells(1, i+1)="b" then racha = racha+1 'así compruebo los cambios a>b y los acumulo
if cells(1, i)="b" and cells(1, i+1)="a" then racha = racha+1 'así compruebo los cambios b>a y los acumulo
'(...) E iría contando lo de las otras casillas siguiendo con el next
'(...)
msgbox racha 'Para ver el recuento final
end sub[/CODE]

He rehecho esta parte de la macro de memoria, aviso ;) Pero no puedo hacerlo de ninguna de las maneras si hay X celdas vacías en la fila, y el problema es que pueden variar en cantidad. He intentado hacer que Excel busque y compare más allá de las siguientes celdas vacías (a la derecha de la celda activa), pero no lo consigo, o me cuenta valores repetidos, por la forma en que monté mis primeras macros-test. ¿Qué sería más eficaz en términos de rendimiento (velocidad): una macro o una fórmula...? Porque tendré que contar 'unos cuantos' miles de casillas, creo X)

Un saludo a todos y gracias de antemano por el interés :)

rachas.xls

publicado

Hola shadowjuan

Revisa el adjunto, verás que con LARGO y SUSTITUIR se puede obtener el resultado deseado.

Quizás (seguro) sea más práctico utilizar una columna auxiliar en la que concatenes las 31 celdas y usar estas celdas en la función que te he montado en vez de usar la concatenación directamente en la función.

Un saludo desde Vitoria

ContarCadena_io_120710b.zip

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.