# contra valores de una lista sin repetir



## rguevara (Apr 12, 2002)

Tengo una lista de 100 personas de entre las cuales en realidad son 25 que se repiten hasta sumar 100. Lo que deseo es contar solo los nombres distintos, es decir que para mi ejemplo el resultado sea 25.
Muchas Gracias.


----------



## Juan Pablo González (Apr 12, 2002)

Algo así ?

{=SUMA(1/CONTAR.SI(A1:A100,A1:A100))}

Es una fórmula matricial, se debe entrar con Control Shift Enter.


----------



## rguevara (Apr 13, 2002)

Muchas gracias Juan Pablo,
El unico inconveniente de dicha formula es que no funciona cuando en el rango encuentra celdas en blanco.
Aproveche para hacer la consulta en ingles y me dieron esta formula:
=SUMA(SI(LARGO(A1:A14)>0,1/CONTAR.SI(A1:A14,A1:A14)))

Podrias darnos un alcance acerca de las formulas matriciales.

Gracias

Renzo


----------



## Juan Pablo González (Apr 18, 2002)

Una fórmula matricial es muy simple.  El mejor ejemplo es este:

Si tengo dos columnas, A y B con números y quiero saber por ejemplo, cuanto es la suma de la multiplicación de cada par (Aunque esto se hace con otra fórmula), la opción "normal" es poner en la columna C la fórmula

=A1*B1

y rellenar hasta que se tenga completa la columna, y después sumar estos resultados, cierto ?  esto se puede hacer más sencillo con una fórmula matricial así:

{=SUMA(A1:A10*B1*B10)}

Lo que Excel hace, muy "inteligentemente" es coger cada elemento de la matriz y multiplicarlo, generando una única matriz (Lo que se "ve" en la Columna C), y suma ese resultado...

No se si sea claro...


----------



## rguevara (Apr 25, 2002)

Juan Pablo,

Bastante claro tu ejemplo, muchas gracias.

Saludos,

Renzo


----------



## BuHoSoFt (Jun 30, 2002)

Tengo un problema muy parecido, y lo resolví bien con sus indicaciones, pero mi rango tiene 5.000 filas de las cuales solo se han ingresado las primeras 200 filas con datos, cantidad que irá creciendo en forma paulatina.
¿Puedo Agragar a estas fórmulas un rango "Dinámico", con el fin de no quitar tanto recurso al PC?
la formula actual es:

{=SUMA(SI(Clientes!B70:B5000=F13;1/CONTAR.SI(Clientes!D70:D5000;Clientes!D70:D5000)))}

Gracias!


----------



## Juan Pablo González (Jun 30, 2002)

Estas fórmulas funcionan también con rangos dinámicos.

Estos se hacen con rangos nombrados (Control F3) y fórmulas que incluyen DESREF y CONTARA o CONTAR.SI, o COINCIDIR, dependiendo del tipo de datos utilizados.  En el foro en inglés hay varios ejemplos, depronto buscando por 'Dynamic Ranges'

Si tiene problemas, escriba de nuevo y pondré algunos ejemplos.


----------



## BuHoSoFt (Jul 1, 2002)

Gracias por la indicación Juan Pablo!
Lamentablemente, y por falta de tiempo, tuve que solucionar el problema creando un pequeño macro. Pero voy a empesar a buscar la manera de solucionarlo con una fórmula que tenga rangos dinámicos, siguiendo tus consejos. Soy de la idea de que es mejor solucionar los problemas con fórmulas que con Macros ya que es más práctico.
Voy a poner de todas maneras el macro por si a alguien le interesa:

For Contador = PrimerMov - 1 To UltimoMov
    Celda1 = Worksheets(1).Cells(Contador, 4)
    Celda2 = Worksheets(1).Cells(Contador + 1, 4)
    Rut1 = Worksheets(1).Cells(Contador, 2)
    Rut2 = Worksheets(1).Cells(Contador + 1, 2)
    If Rut1 = Rut Or Rut2 = Rut Then
        If Rut2 = Rut1 Then
            If Celda2 <> Celda1 Then
                Real = Real + 1
            End If
        Else
            If Celda2 <> Celda1 Then
                Real = Real + 0.5
            End If
        End If
    End If
Next Contador
Cells(Origen1x + 47, Origen1y + 4).Value = Int(Real + 0.5)

Las Celdas "Celdax" contienen el número de factura y "Rutx" la identificación del Cliente
"PrimerMov" y "UltimoMov" es el rango donde se encuentran las facturas a buscar para contarlas.
chau!


----------

