Extraer grupos de iguales

04/10/2004 - 17:12 por Jose | Informe spam
Hola amigos:
Tengo una columna donde pongo las referencias de dos de los articulos y necesito extraer en otras casillas los grupos repetidos que se forman , de tal manera que pueda sacar la estadistica de las agrupaciones resultantes.
en las que se repitan más de dos veces seguidas el mismo artículo.
Me explico:

1) 5799
2) 5799
3) 2133
4) 2133
5) 2133
6) 5799
7) 5799
8) 2133
9) 2133
10) 2133
11) 2133
12) 2133
13) 5799
14) 2133

En este ejemplo se han repetidos los grupos de la siguiente forma:

5799 - 2 de 2 repeticiones
2133 - 1 de 3 repeticiones
2133 - 1 de 5 repeticiones

No se si esto se hace por formula o por funcion.
Muchas gracias por vuestra ayuda y saludos :-))

Preguntas similare

Leer las respuestas

#1 Víctor
04/10/2004 - 20:37 | Informe spam
Suponiendo que tus datos estén en la columna A, con esta
fórmula en B1:

=CONTAR.SI(A:A;A1)

tendrás el número de veces que se repite el artículo que
tengas en A1. Copias la fórmula hacia abajo, y listo.

Aunque quizá te interese crear primero una tabla con la
lista de artículos (no repetidos). Puedes hacerlo con
Menú / Datos / Filtro / Filtro Avanzado, y
seleccionar 'Sólo registros únicos'. Copias los datos
resultantes a otra hoja, y a partir de aquí, puedes
emplear la anterior fórmula.

:-)

Hola amigos:
Tengo una columna donde pongo las referencias de dos de


los articulos y necesito extraer en otras casillas los
grupos repetidos que se forman , de tal manera que pueda
sacar la estadistica de las agrupaciones resultantes.
en las que se repitan más de dos veces seguidas el mismo


artículo.
Me explico:

1) 5799
2) 5799
3) 2133
4) 2133
5) 2133
6) 5799
7) 5799
8) 2133
9) 2133
10) 2133
11) 2133
12) 2133
13) 5799
14) 2133

En este ejemplo se han repetidos los grupos de la


siguiente forma:

5799 - 2 de 2 repeticiones
2133 - 1 de 3 repeticiones
2133 - 1 de 5 repeticiones

No se si esto se hace por formula o por funcion.
Muchas gracias por vuestra ayuda y saludos :-))

.

Respuesta Responder a este mensaje
#2 Jose
05/10/2004 - 09:34 | Informe spam
Hola Victor: Gracias por contestar.
Con esa formula que has puesto, lo que hace es contar el total de veces que sale el mismo, pero no los agrupa en el caso que salgan dos o mas seguidos. Lo que necesito es contar los grupos que se forman de un mismo numero (seguidos), y la cantidad de veces que repiten dichos grupos.
En el ejemplo que he puesto en el primer post, el resultado que daba era el siguiente:

5799 - 2 grupos de 2 repeticiones
2133 - 1 grupo de 3 repeticiones
2133 - 1 grupo de 5 repeticiones

Saludos

-
Víctor escribió en el mensaje de noticias 2e4201c4aa41$4120a0b0$
Suponiendo que tus datos estén en la columna A, con esta
fórmula en B1:

=CONTAR.SI(A:A;A1)

tendrás el número de veces que se repite el artículo que
tengas en A1. Copias la fórmula hacia abajo, y listo.

Aunque quizá te interese crear primero una tabla con la
lista de artículos (no repetidos). Puedes hacerlo con
Menú / Datos / Filtro / Filtro Avanzado, y
seleccionar 'Sólo registros únicos'. Copias los datos
resultantes a otra hoja, y a partir de aquí, puedes
emplear la anterior fórmula.

:-)

Hola amigos:
Tengo una columna donde pongo las referencias de dos de


los articulos y necesito extraer en otras casillas los
grupos repetidos que se forman , de tal manera que pueda
sacar la estadistica de las agrupaciones resultantes.
en las que se repitan más de dos veces seguidas el mismo


artículo.
Me explico:

1) 5799
2) 5799
3) 2133
4) 2133
5) 2133
6) 5799
7) 5799
8) 2133
9) 2133
10) 2133
11) 2133
12) 2133
13) 5799
14) 2133

En este ejemplo se han repetidos los grupos de la


siguiente forma:

5799 - 2 de 2 repeticiones
2133 - 1 de 3 repeticiones
2133 - 1 de 5 repeticiones

No se si esto se hace por formula o por funcion.
Muchas gracias por vuestra ayuda y saludos :-))

.

Respuesta Responder a este mensaje
#3 Fernando Arroyo
05/10/2004 - 17:13 | Informe spam
Prueba con el siguiente código, pero ten en cuenta que en la celda A1 tienes que poner un encabezado, porque si no el filtro avanzado que utiliza el código no funcionará:


Sub Prueba()
Dim m1() As Long, m2() As Long
Dim rngF As Range, rngC As Range
Dim n As Long, lngAcum As Long, lngValor As Long, strC As String

With Worksheets("Hoja1")
.Range("A1:A" & .[A65536].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, Unique:=True

Set rngF = .Range("A2:A" & .[A65536].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
ReDim m1(1 To rngF.Count)
ReDim m2(1 To rngF.Count, 20)

n = 1
For Each rngC In rngF
m1(n) = rngC
n = n + 1
Next rngC

.ShowAllData

n = 3
lngValor = .[A2]
lngAcum = 1

While Not IsEmpty(.Cells(n, 1))
If .Cells(n, 1) = lngValor Then
lngAcum = lngAcum + 1
Else
If lngAcum > 1 Then m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) = m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) + 1
lngAcum = 1
lngValor = .Cells(n, 1)
End If

n = n + 1

Wend

End With

If lngAcum > 1 Then m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) = m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) + 1

For n = 1 To UBound(m1)
For lngAcum = 1 To UBound(m2)
If m2(n, lngAcum) > 0 Then strC = strC & m1(n) & " - " & m2(n, lngAcum) & IIf(m2(n, lngAcum) = 1, " grupo", " grupos") & " de " & lngAcum & " repeticiones" & vbNewLine
Next lngAcum
Next n

MsgBox strC

Set rngC = Nothing
Set rngF = Nothing
End Sub


El número máximo de veces consecutivas que puede estar un elemento es 20. Esto se podría ampliar (o, para el caso, reducir) en la instrucción:

ReDim m2(1 To rngF.Count, 20)

sustituyendo 20 por el número que sea. Pero ten en cuenta que cuanto mayor sea el número, más memoria necesitará la matriz.

Tal como va el código, al terminar su ejecución aparecerá un mensaje con las repeticiones encontradas, pero también sería posible volcar el resultado a un rango, modificando el código.

Yo lo he probado, y parece que funciona, pero no te fíes a ciegas de él.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Jose" escribió en el mensaje news:
Hola Victor: Gracias por contestar.
Con esa formula que has puesto, lo que hace es contar el total de veces que sale el mismo, pero no los agrupa en el caso que salgan dos o mas seguidos. Lo que necesito es contar los grupos que se forman de un mismo numero (seguidos), y la cantidad de veces que repiten dichos grupos.
En el ejemplo que he puesto en el primer post, el resultado que daba era el siguiente:

5799 - 2 grupos de 2 repeticiones
2133 - 1 grupo de 3 repeticiones
2133 - 1 grupo de 5 repeticiones

Saludos

-
Víctor escribió en el mensaje de noticias 2e4201c4aa41$4120a0b0$
Suponiendo que tus datos estén en la columna A, con esta
fórmula en B1:

=CONTAR.SI(A:A;A1)

tendrás el número de veces que se repite el artículo que
tengas en A1. Copias la fórmula hacia abajo, y listo.

Aunque quizá te interese crear primero una tabla con la
lista de artículos (no repetidos). Puedes hacerlo con
Menú / Datos / Filtro / Filtro Avanzado, y
seleccionar 'Sólo registros únicos'. Copias los datos
resultantes a otra hoja, y a partir de aquí, puedes
emplear la anterior fórmula.

:-)

Hola amigos:
Tengo una columna donde pongo las referencias de dos de


los articulos y necesito extraer en otras casillas los
grupos repetidos que se forman , de tal manera que pueda
sacar la estadistica de las agrupaciones resultantes.
en las que se repitan más de dos veces seguidas el mismo


artículo.
Me explico:

1) 5799
2) 5799
3) 2133
4) 2133
5) 2133
6) 5799
7) 5799
8) 2133
9) 2133
10) 2133
11) 2133
12) 2133
13) 5799
14) 2133

En este ejemplo se han repetidos los grupos de la


siguiente forma:

5799 - 2 de 2 repeticiones
2133 - 1 de 3 repeticiones
2133 - 1 de 5 repeticiones

No se si esto se hace por formula o por funcion.
Muchas gracias por vuestra ayuda y saludos :-))

.

Respuesta Responder a este mensaje
#4 Jose
06/10/2004 - 09:30 | Informe spam
Fernando muchisimas gracias:
Esta tarde lo probare y te dire como me funciona.
Saludos :-)))


Fernando Arroyo escribió en el mensaje de noticias
Prueba con el siguiente código, pero ten en cuenta que en la celda A1 tienes que poner un encabezado, porque si no el filtro avanzado que utiliza el código no funcionará:


Sub Prueba()
Dim m1() As Long, m2() As Long
Dim rngF As Range, rngC As Range
Dim n As Long, lngAcum As Long, lngValor As Long, strC As String

With Worksheets("Hoja1")
.Range("A1:A" & .[A65536].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, Unique:=True

Set rngF = .Range("A2:A" & .[A65536].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
ReDim m1(1 To rngF.Count)
ReDim m2(1 To rngF.Count, 20)

n = 1
For Each rngC In rngF
m1(n) = rngC
n = n + 1
Next rngC

.ShowAllData

n = 3
lngValor = .[A2]
lngAcum = 1

While Not IsEmpty(.Cells(n, 1))
If .Cells(n, 1) = lngValor Then
lngAcum = lngAcum + 1
Else
If lngAcum > 1 Then m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) = m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) + 1
lngAcum = 1
lngValor = .Cells(n, 1)
End If

n = n + 1

Wend

End With

If lngAcum > 1 Then m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) = m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) + 1

For n = 1 To UBound(m1)
For lngAcum = 1 To UBound(m2)
If m2(n, lngAcum) > 0 Then strC = strC & m1(n) & " - " & m2(n, lngAcum) & IIf(m2(n, lngAcum) = 1, " grupo", " grupos") & " de " & lngAcum & " repeticiones" & vbNewLine
Next lngAcum
Next n

MsgBox strC

Set rngC = Nothing
Set rngF = Nothing
End Sub


El número máximo de veces consecutivas que puede estar un elemento es 20. Esto se podría ampliar (o, para el caso, reducir) en la instrucción:

ReDim m2(1 To rngF.Count, 20)

sustituyendo 20 por el número que sea. Pero ten en cuenta que cuanto mayor sea el número, más memoria necesitará la matriz.

Tal como va el código, al terminar su ejecución aparecerá un mensaje con las repeticiones encontradas, pero también sería posible volcar el resultado a un rango, modificando el código.

Yo lo he probado, y parece que funciona, pero no te fíes a ciegas de él.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Jose" escribió en el mensaje news:
Hola Victor: Gracias por contestar.
Con esa formula que has puesto, lo que hace es contar el total de veces que sale el mismo, pero no los agrupa en el caso que salgan dos o mas seguidos. Lo que necesito es contar los grupos que se forman de un mismo numero (seguidos), y la cantidad de veces que repiten dichos grupos.
En el ejemplo que he puesto en el primer post, el resultado que daba era el siguiente:

5799 - 2 grupos de 2 repeticiones
2133 - 1 grupo de 3 repeticiones
2133 - 1 grupo de 5 repeticiones

Saludos

-
Víctor escribió en el mensaje de noticias 2e4201c4aa41$4120a0b0$
Suponiendo que tus datos estén en la columna A, con esta
fórmula en B1:

=CONTAR.SI(A:A;A1)

tendrás el número de veces que se repite el artículo que
tengas en A1. Copias la fórmula hacia abajo, y listo.

Aunque quizá te interese crear primero una tabla con la
lista de artículos (no repetidos). Puedes hacerlo con
Menú / Datos / Filtro / Filtro Avanzado, y
seleccionar 'Sólo registros únicos'. Copias los datos
resultantes a otra hoja, y a partir de aquí, puedes
emplear la anterior fórmula.

:-)

Hola amigos:
Tengo una columna donde pongo las referencias de dos de


los articulos y necesito extraer en otras casillas los
grupos repetidos que se forman , de tal manera que pueda
sacar la estadistica de las agrupaciones resultantes.
en las que se repitan más de dos veces seguidas el mismo


artículo.
Me explico:

1) 5799
2) 5799
3) 2133
4) 2133
5) 2133
6) 5799
7) 5799
8) 2133
9) 2133
10) 2133
11) 2133
12) 2133
13) 5799
14) 2133

En este ejemplo se han repetidos los grupos de la


siguiente forma:

5799 - 2 de 2 repeticiones
2133 - 1 de 3 repeticiones
2133 - 1 de 5 repeticiones

No se si esto se hace por formula o por funcion.
Muchas gracias por vuestra ayuda y saludos :-))

.

Respuesta Responder a este mensaje
#5 Fernando Arroyo
06/10/2004 - 13:09 | Informe spam
"Jose" escribió en el mensaje news:
Fernando muchisimas gracias:
Esta tarde lo probare y te dire como me funciona.
Saludos :-)))




Me anticipo a tu prueba: tal como está el código, no te va a funcionar bien. Tienes que sustituir la instrucción

For lngAcum = 1 To UBound(m2)

por

For lngAcum = 1 To 20


Ten en cuenta que esto implica que para cambiar el número máximo de veces consecutivas que puede estar un elemento habría que modificar tanto esta instrucción como la que decía en mi anterior mensaje. El código completo (y creo que, ahora sí, funcionando bien), es:


Sub Prueba()
Dim m1() As Long, m2() As Long
Dim rngF As Range, rngC As Range
Dim n As Long, lngAcum As Long, lngValor As Long, strC As String

With Worksheets("Hoja1")
.Range("A1:A" & .[A65536].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, Unique:=True

Set rngF = .Range("A2:A" & .[A65536].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
ReDim m1(1 To rngF.Count)
ReDim m2(1 To rngF.Count, 20) '20 es el número máximo de veces consecutivas de un número que puede haber.

n = 1
For Each rngC In rngF
m1(n) = rngC
n = n + 1
Next rngC

.ShowAllData

n = 3
lngValor = .[A2]
lngAcum = 1

While Not IsEmpty(.Cells(n, 1))
If .Cells(n, 1) = lngValor Then
lngAcum = lngAcum + 1
Else
If lngAcum > 1 Then m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) = m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) + 1
lngAcum = 1
lngValor = .Cells(n, 1)
End If

n = n + 1

Wend

End With

If lngAcum > 1 Then m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) = m2(WorksheetFunction.Match(lngValor, m1, 0), lngAcum) + 1

For n = 1 To UBound(m1)
For lngAcum = 1 To 20 '20 es el número máximo de veces consecutivas de un número que puede haber.
If m2(n, lngAcum) > 0 Then strC = strC & m1(n) & " - " & m2(n, lngAcum) & IIf(m2(n, lngAcum) = 1, " grupo", " grupos") & " de " & lngAcum & " repeticiones" & vbNewLine
Next lngAcum
Next n

MsgBox strC

Set rngC = Nothing
Set rngF = Nothing
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida