Contar secuencia de unos y ceros con Excel

25/09/2009 - 05:27 por xorge | Informe spam
Hola a todos, soy nuevo en este grupo, tengo una duda, yo tengo una
columna, en Excel, llena de unos y ceros, lo que quiero hacer es
contar esos unos y ceros agrupandolos de uno en uno o de dos en dos
por ejemplo:

Secuencia Binaria --> 1101010001010 (la secuencia la tengo en una
columna no en forma de fila)

Ceros agrupados de 1 --> 3
Ceros agrupados de 2 --> 0
Ceros agrupados de 3 --> 1

De forma analoga se hace con los unos solo que no debo coger los
digitos de los extremos.

He intentado con la funcion contar.si pero no me sale

¿alguna sugerencia?

Preguntas similare

Leer las respuestas

#1 xorge
01/10/2009 - 03:52 | Informe spam
On 26 sep, 01:28, Gabriel Raigosa wrote:
Me gustaria saber si es un tema de binarios

para determinar cuantos digitos tenemos que usar para la solucion.

Gabriel

Héctor Miguel escribió:

> hola, Gabriel !

>> Me gustaria Invitar a KL, es de los temas que a el y por supuesto a ti, les gusta
>> pero sigo insistiendo, el VBA, nos puede resolver este problema...

> esperemos que KL llegue a ver/visitar/... esta consulta (?), en via de mientras...

> - ya tienes el escenario: "... yo tengo una columna, en Excel, llena de unos y ceros ..."
> - ya tienes las restricciones: "... no debo coger los digitos de los extremos ..."
> - ya tienes un ejemplo: "ver consulta inicial de OP"
> (claro que terminos como "una columna... LLENA de unos y ceros..." presenta mas de dos "imponderables")

> - ya tienes algunas ideas sobre la mejor posible alternativa de algoritmo ?
>   - bucle celda-a-celda durante "n_filas" ?... cuantas ?... y los grupos ?... ??'
>   - prevencion/correccion/... de (posibles) errores del usuario ?
>   - flexibilidad para sustituir cualquiera de las variables ?
>   - etc. (???)

> saludos,
> hector.



Saludos

Gabriel Raigosa tiene razon no funciona bien con los "unos", en la
secuencia existen 5 y solo cuenta 4, la verdad no se me ocurre nada
ojala puedan ayudarme
Respuesta Responder a este mensaje
#2 Héctor Miguel
01/10/2009 - 06:24 | Informe spam
hola, chicos !

Gabriel Raigosa tiene razon no funciona bien con los "unos", en la secuencia existen 5 y solo cuenta 4
la verdad no se me ocurre nada ojala puedan ayudarme



tampoco funciona "bien" con los ceros (depende de la "secuencia binaria" que pongas en "el rango") :-(
la "restriccion" que pones de no considerar ni el primero ni el ultimo en "el rango"...
OBLIGA a convertir en "lo contrario" del numero buscado dichos extremos (el primero y el ultimo), ademas...
se necesita hacer "avances" uno-por-uno para evitar la discriminacion de cualquiera "encontrado" (previamente)

el siguiente ejemplo de funcion personalizada NO contempla prevencion/correccion/... de (posibles) errores en su uso
(p.e. asume que "el rango" sera SIEMPRE vertical, o sea, varias celdas CONTINUAS en la misma columna)

minimo xl2000 en adelante, haz pruebas y... si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Function Continuos(Binario As Range, Num As Byte, Rep As Byte) As Byte
Dim Base As String, Cadena As String, Serie As String, n As Byte
Base = IIf(Num = 1, "0", "1")
Cadena = Base & String(Rep, CStr(Num)) & Base
With Binario
Serie = Base & _
Join(Application.Transpose(.Offset(1).Resize(.Rows.Count - 2).Value), "") & Base
End With
Continuos = 0
For n = 1 To Len(Serie) - (Rep + 1)
Continuos = Continuos - (Mid(Serie, n, Len(Cadena)) = Cadena)
Next
End Function
Respuesta Responder a este mensaje
#3 AnSanVal
01/10/2009 - 11:07 | Informe spam
Yo habia montado el siguiente código, suponiendo que la secuencia está en la columna A y empieza en la fila 2:




Sub continuos()

Dim repes(1, 7) As Integer, _

cuenta%, _

fila%, _

n%, _

resultado$, _

anterior As Range



cuenta = -1

Set anterior = Range("A2")

resultado = " 0 1" & vbCr & vbCr

For fila = 3 To Cells(Rows.Count, "A").End(xlUp).Row

If Cells(fila, 1) = anterior Then

cuenta = (cuenta) - 1 * (anterior.Address <> "$A$2")

Else

If anterior.Address <> "$A$2" Then repes(anterior.Value, _

cuenta - 1) = repes(anterior.Value, cuenta - 1) + 1

Set anterior = Cells(fila, 1)

cuenta = 1

End If

Next fila

For n = 0 To 7

resultado = resultado & n + 1 & " Rep. = " & repes(0, n) & " " & repes(1, n) & vbCr

Next n

Set anterior = Nothing

MsgBox resultado

End Sub


Admite 8 valores continuos (repetidos), pero es facilmente modificable.




Saludos: Antonio.
Respuesta Responder a este mensaje
#4 sailepaty
01/10/2009 - 22:43 | Informe spam
Hola señores,

Aunque no participo del foro me agrada revisarlo frecuentemente y este post
me llamo la atención y me parece que esta fórmula pudiera funcionar.

Rango de datos en: [B2:B4] / Digito a contar en:[E1] / Veces consecutivas
en:[E2]

Esta fórmula en C3 y copiar hasta C13.

=Y(SI(FILAS($B$3:B3)=1,1,B2<>$E$1),CONTAR.SI(B3:INDICE($B$3:$B$13,MIN(FILAS($B$3:$B$13),1+$E$2*FILAS($B$3:B3))),$E$1)=$E$2,SI(FILA(B3)=FILA($B$13),1,INDICE($B$3:$B$13,MIN(FILAS($B$3:$B$13),1+$E$2*FILAS($B$3:B3)))<>$E$1))*1

Ahora en E3 para obtener el total:
=SUMA(C3:C13)

Saludos.
Respuesta Responder a este mensaje
#5 Héctor Miguel
02/10/2009 - 00:54 | Informe spam
hola, !

Aunque no participo del foro me agrada revisarlo frecuentemente y este post me llamo la atencion
y me parece que esta formula pudiera funcionar.
Rango de datos en: [B2:B4] / Digito a contar en:[E1] / Veces consecutivas en:[E2]
Esta formula en C3 y copiar hasta C13.
=Y(SI(FILAS($B$3:B3)=1,1,B2<>$E$1),CONTAR.SI(B3:INDICE($B$3:$B$13,MIN(FILAS($B$3:$B$13),1+$E$2*FILAS($B$3:B3))),$E$1)=$E$2,SI(FILA(B3)=FILA($B$13),1,INDICE($B$3:$B$13,MIN(FILAS($B$3:$B$13),1+$E$2*FILAS($B$3:B3)))<>$E$1))*1
Ahora en E3 para obtener el total: =SUMA(C3:C13)



(segun pruebas) esta formula tambien presenta fallas (p.e.) cuando en la secuencia se busca 0 (cero) 2 o mas veces "consecutivas"
incluso (segun los datos del ejemplo) "encuentra" secuencias con dos o tres "unos" (que NO existen) -???-
y habria que considerar un -posible- consumo adicional de recursos al utilizar n_cedas "auxiliares" para dos o mas "secuencias binarias" (???)

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida