Contar si... no se repite

03/12/2004 - 16:35 por cuejorge2003 | Informe spam
Buen día,

Tengo una base de datos (A1:AC10000)en un archivo donde los datos de la
columna M se repiten.

Lo que quiero hacer es contar lo que no se repita, pero algunas veces está
filtrado.

Hasta la fecha lo que hago es en una columna (AE) coloco la siguiente fórmula:
=IF(M2=M1,0,1) y sumo lo que haya en esta columna.

Al hacer esto estoy ocupando siempre mucha memoria.
Me pueden ayudar con una fórmula o código ?

De antemano gracias.
Un saludo.
Jorge.

Preguntas similare

Leer las respuestas

#6 cuejorge2003
04/12/2004 - 17:33 | Informe spam
Víctor,

Puedo añadir condiciones como:
A1:A1000 = 416500
H1:H1000 = 2

De antemano, gracias.
Un saludo.
Jorge
Respuesta Responder a este mensaje
#7 cuejorge2003
04/12/2004 - 19:39 | Informe spam
Víctor,

¿Puedo añadir condiciones como??:
A1:A1000 = 416500
H1:H1000 = 2
Se puede??

De antemano, gracias.
Un saludo.
Jorge
Respuesta Responder a este mensaje
#8 KL
04/12/2004 - 19:54 | Informe spam
Jorge,

Prueba este codigo. Es posible q tengas q introducir algunos cambios al
primer macro para ajustarlo a tus necesidades.

Saludos,
KL

Sub ValoresUnicosFiltrados()
Dim MyArray
Dim Count As String
Dim r As Range
Dim col As String

'Establece la columna a evaluar.
col = "C"

'Detecta la presencia de AutoFiltro y
'establece el rango q contiene la base de datos.
With ActiveSheet
Select Case .AutoFilterMode
Case False
'En caso de la ausencia de AutoFiltro
'establece el rango usado como tabla.
Set rng = .UsedRange
Case True
'En caso de la presencia de AutoFiltro
'establece el rango filtrado como tabla.
Set rng = .AutoFilter.Range
End Select
End With

'Redimensiona el rango de la la base de datos para
'excluir los encabezados, asumiendo q la primera fila
'del rango usado/filtrado contiene los encabezados.
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)

'Crea una matriz usando los valores contenidos en
'las celdas dentro la columna elegida mas arriba,
'siempre y cuando sean visibles y dentro del rango
'filtrado.
ReDim MyArray(0)
For Each r In rng.Rows
If r.Hidden = False And Range(col & r.Row) <> "" Then
MyArray(UBound(MyArray)) = Range(col & r.Row).Value
ReDim Preserve MyArray(UBound(MyArray) + 1)
End If
Next r

'Corrige el numero de elementos en la matriz
ReDim Preserve MyArray(UBound(MyArray) - 1)

'Cuenta los valores unicos usando la funcion de
'John Walkenbach.
MsgBox UniqueItems(MyArray, True)
End Sub

Function UniqueItems(ArrayIn, Optional Count As Variant) As Variant
' Accepts an array or range as input
' If Count = True or is missing, the function returns the number
' of unique elements
' If Count = False, the function returns a variant array of unique
' elements

Dim Unique() As Variant ' array that holds the unique items
Dim Element As Variant
Dim i As Integer
Dim FoundMatch As Boolean

' If 2nd argument is missing, assign default value
If IsMissing(Count) Then Count = True

' Counter for number of unique elements
NumUnique = 0

' Loop thru the input array
For Each Element In ArrayIn
FoundMatch = False

' Has item been added yet?
For i = 1 To NumUnique
If Element = Unique(i) Then
FoundMatch = True
GoTo AddItem '(Exit For-Next loop)
End If
Next i

AddItem:
' If not in list, add the item to unique list
If Not FoundMatch Then
NumUnique = NumUnique + 1
ReDim Preserve Unique(NumUnique)
Unique(NumUnique) = Element
End If

Next Element

' Assign a value to the function
If Count Then UniqueItems = NumUnique Else UniqueItems = Unique
End Function



""
wrote in message news:
Victor,
EXCELENTE !!!

Funciona muy bien.

Con esto es suficiente, pero en caso que tengas algo para una columna
filtrada te lo agradeceria mucho.

Un saludo.
Jorge


"Victor" wrote:

Prueba esta formula:

=SUMAPRODUCTO((M1:M1000<>"")/(CONTAR.SI(M1:M1000;M1:M1000)+(M1:M1000="")))

Amplia el rango M1:M1000, si lo necesitas.

:-)



Alfredo Espinosa wrote:

> Si esta en VBA entonces te recomiendo lo siguiente:

> 1. No uses .SELECT en ningun caso.
> 2. Ubica una celda fija por ejemplo M1 y crea un objeto
> rango con esa celda.
> 3. Muevete hacia abajo con la opcion RANGO.OFFSET
> 4. Asigna los valores resultado de tu comparacion
> directamente, no uses formulas de Excel.
> 5. Para asignar el resultado usa
> RANGO.OFFSET().VALUE=valor

> Pero antes de todo, explora las funciones que trae Excel,
> es muy probable que ya exista una que hace lo que quieres.

> La tabla dinamica la puedes crear en una hoja
> independiente y solita te calcula los diferentes. No
> necesitas codigo o macros.

> Alfredo Espinosa


> >Lo tengo en una macro.
> >
> >Hay algA?n cA?digo para hacerlo ?
> >
> >Un saludo.
> >
> >
> >"Alfredo Espinosa" wrote:
> >
> >> A?Lo has intentado con una tabla dinamica de la
> columna M?
> >>
> >>
> >> >Buen dAfA-a,
> >> >
> >> >Tengo una base de datos (A1:AC10000)en un archivo
> donde
> >> los datos de la
> >> >columna M se repiten.
> >> >
> >> >Lo que quiero hacer es contar lo que no se repita,
> pero
> >> algunas veces estAfA?
> >> >filtrado.
> >> >
> >> >Hasta la fecha lo que hago es en una columna (AE)
> coloco
> >> la siguiente fAfA?rmula:
> >> >=IF(M2=M1,0,1) y sumo lo que haya en esta columna.
> >> >
> >> >Al hacer esto estoy ocupando siempre mucha memoria.
> >> >Me pueden ayudar con una fAfA?rmula o cAfA?digo ?
> >> >
> >> >De antemano gracias.
> >> >Un saludo.
> >> >Jorge.
> >> >.
> >> >
> >>
> >.
> >



Respuesta Responder a este mensaje
#9 cuejorge2003
04/12/2004 - 20:17 | Informe spam
EXCELENTE!!!
Muchas gracias.
Saludos.

"KL" wrote:

Jorge,

Prueba este codigo. Es posible q tengas q introducir algunos cambios al
primer macro para ajustarlo a tus necesidades.

Saludos,
KL

Sub ValoresUnicosFiltrados()
Dim MyArray
Dim Count As String
Dim r As Range
Dim col As String

'Establece la columna a evaluar.
col = "C"

'Detecta la presencia de AutoFiltro y
'establece el rango q contiene la base de datos.
With ActiveSheet
Select Case .AutoFilterMode
Case False
'En caso de la ausencia de AutoFiltro
'establece el rango usado como tabla.
Set rng = .UsedRange
Case True
'En caso de la presencia de AutoFiltro
'establece el rango filtrado como tabla.
Set rng = .AutoFilter.Range
End Select
End With

'Redimensiona el rango de la la base de datos para
'excluir los encabezados, asumiendo q la primera fila
'del rango usado/filtrado contiene los encabezados.
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)

'Crea una matriz usando los valores contenidos en
'las celdas dentro la columna elegida mas arriba,
'siempre y cuando sean visibles y dentro del rango
'filtrado.
ReDim MyArray(0)
For Each r In rng.Rows
If r.Hidden = False And Range(col & r.Row) <> "" Then
MyArray(UBound(MyArray)) = Range(col & r.Row).Value
ReDim Preserve MyArray(UBound(MyArray) + 1)
End If
Next r

'Corrige el numero de elementos en la matriz
ReDim Preserve MyArray(UBound(MyArray) - 1)

'Cuenta los valores unicos usando la funcion de
'John Walkenbach.
MsgBox UniqueItems(MyArray, True)
End Sub

Function UniqueItems(ArrayIn, Optional Count As Variant) As Variant
' Accepts an array or range as input
' If Count = True or is missing, the function returns the number
' of unique elements
' If Count = False, the function returns a variant array of unique
' elements

Dim Unique() As Variant ' array that holds the unique items
Dim Element As Variant
Dim i As Integer
Dim FoundMatch As Boolean

' If 2nd argument is missing, assign default value
If IsMissing(Count) Then Count = True

' Counter for number of unique elements
NumUnique = 0

' Loop thru the input array
For Each Element In ArrayIn
FoundMatch = False

' Has item been added yet?
For i = 1 To NumUnique
If Element = Unique(i) Then
FoundMatch = True
GoTo AddItem '(Exit For-Next loop)
End If
Next i

AddItem:
' If not in list, add the item to unique list
If Not FoundMatch Then
NumUnique = NumUnique + 1
ReDim Preserve Unique(NumUnique)
Unique(NumUnique) = Element
End If

Next Element

' Assign a value to the function
If Count Then UniqueItems = NumUnique Else UniqueItems = Unique
End Function



""
wrote in message news:
> Victor,
> EXCELENTE !!!
>
> Funciona muy bien.
>
> Con esto es suficiente, pero en caso que tengas algo para una columna
> filtrada te lo agradeceria mucho.
>
> Un saludo.
> Jorge
>
>
> "Victor" wrote:
>
>> Prueba esta formula:
>>
>> =SUMAPRODUCTO((M1:M1000<>"")/(CONTAR.SI(M1:M1000;M1:M1000)+(M1:M1000="")))
>>
>> Amplia el rango M1:M1000, si lo necesitas.
>>
>> :-)
>>
>>
>>
>> Alfredo Espinosa wrote:
>>
>> > Si esta en VBA entonces te recomiendo lo siguiente:
>>
>> > 1. No uses .SELECT en ningun caso.
>> > 2. Ubica una celda fija por ejemplo M1 y crea un objeto
>> > rango con esa celda.
>> > 3. Muevete hacia abajo con la opcion RANGO.OFFSET
>> > 4. Asigna los valores resultado de tu comparacion
>> > directamente, no uses formulas de Excel.
>> > 5. Para asignar el resultado usa
>> > RANGO.OFFSET().VALUE=valor
>>
>> > Pero antes de todo, explora las funciones que trae Excel,
>> > es muy probable que ya exista una que hace lo que quieres.
>>
>> > La tabla dinamica la puedes crear en una hoja
>> > independiente y solita te calcula los diferentes. No
>> > necesitas codigo o macros.
>>
>> > Alfredo Espinosa
>>
>>
>> > >Lo tengo en una macro.
>> > >
>> > >Hay algA?n cA?digo para hacerlo ?
>> > >
>> > >Un saludo.
>> > >
>> > >
>> > >"Alfredo Espinosa" wrote:
>> > >
>> > >> A?Lo has intentado con una tabla dinamica de la
>> > columna M?
>> > >>
>> > >>
>> > >> >Buen dAfA-a,
>> > >> >
>> > >> >Tengo una base de datos (A1:AC10000)en un archivo
>> > donde
>> > >> los datos de la
>> > >> >columna M se repiten.
>> > >> >
>> > >> >Lo que quiero hacer es contar lo que no se repita,
>> > pero
>> > >> algunas veces estAfA?
>> > >> >filtrado.
>> > >> >
>> > >> >Hasta la fecha lo que hago es en una columna (AE)
>> > coloco
>> > >> la siguiente fAfA?rmula:
>> > >> >=IF(M2=M1,0,1) y sumo lo que haya en esta columna.
>> > >> >
>> > >> >Al hacer esto estoy ocupando siempre mucha memoria.
>> > >> >Me pueden ayudar con una fAfA?rmula o cAfA?digo ?
>> > >> >
>> > >> >De antemano gracias.
>> > >> >Un saludo.
>> > >> >Jorge.
>> > >> >.
>> > >> >
>> > >>
>> > >.
>> > >
>>
>>
>>



Respuesta Responder a este mensaje
#10 victorbcn1952NO
04/12/2004 - 21:39 | Informe spam
No sé si entiendo bien tu pregunta, pero con esta fórmula:

=SUMAPRODUCTO((A1:A1000A6500)*(H1:H1000=2))

tendrás las vences que aparecen 416500 en la columna A y 2 en la columna
H, AMBAS EN LA MISMA FILA.

Si, por el contrario, quieres saber las veces que aparece 416500 en la
columna A, y las que aparece 2 en la columna H, basta con:

=CONTAR.SI(A1:A1000;416500)+CONTAR.SI(H1:H1000;2)

Disgregando esta fórmula en dos, puedes tener los resultados por separado.

:-)


wrote:

Và­ctor,

¿Puedo aà±adir condiciones como??:
A1:A1000 = 416500
H1:H1000 = 2
Se puede??

De antemano, gracias.
Un saludo.
Jorge
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida