Saltar al contenido

Ruptura de rachas en una serie de dos valores repetidos

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

Featured Replies

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

publicado
  • Autor

Gracias por el archivo. He tenido problemas familiares muy graves durante estos días. Este fin de semana lo miro sin falta y te comento algo, ioyama. Gracias.

Archivado

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