Contar Unicos, Contar.SI

15/03/2006 - 23:09 por Gabriel Raigosa | Informe spam
Saludos Cordiales.

Necesito contar el numero de dias trabajados por un empleado, adjunto libro
de excel el cual describo a continuación.

Tiene dos hojas

En la primera hoja tengo:
Columna "A" codigo del trabajador
Columna "B" nombre
Columna "C" requiero numero de dias trabajados

En la segunda hoja tengo:
Columna "A" codigo del trabajador
Columna "B" la fecha en el que el trabajador realizo una actividad.

Debido a que el trabajador puede realizar varias actividades en el mismo dia
puede aparecer su codigo en otra fila con la misma fecha y otra actividad.

Las columnas siguientes estan ocupadas con otra información que no es de
interes para el conteo pero si para recopilar otra información,ejemplo
actividad, etc.

Entonces lo que requiero es el conteo en la columna "C" de la hoja
"Operario", de los dias "unicos" trabajados que aparecen en la columna "B"
de la hoja "Dias laborados".

Adjunto el libro de excel para quienes me puedan dar una manito en este
sencillo (para algunos) pero complicado asunto (para mi).

Gracias de Antemano.


http://www.exceluciones.com/portal/....php?idH23
Gabriel Raigosa
Medellín - Colombia
GabrielRaigosa@hot.mail.com

Preguntas similare

Leer las respuestas

#16 Gabriel Raigosa
16/03/2006 - 15:58 | Informe spam
Saludos.

Ya vi el error que cometi al introducir la formula, realmente si tube en
cuenta que la funcion se referia a la segunda hoja y se ponia en la primera,
mi error fue que deje el rango solo hasta la fila 100, se me paso ese
"insignificante y poco importante detallito", ahora si.

Muchisimas gracias por tu ayuda

En microsoft habia encontrado algo,

http://support.microsoft.com/defaul...s%3B268001

http://support.microsoft.com/kb/267982/EN-US/

pero no supe aplicar los ejemplos.

Lo dicho mientras mas estudio y aprendo mas cuenta me doy que menos se.

TKS^2

Gabriel Raigosa
Medellin - Colombia


"KL" escribio en el mensaje
news:
Hola Gabriel,

Seguro que si hay problemas para bajar el archivo de Exceluciones, si de
paso sabes donde puedo poner los archivos para que se puedan descargar y
no
ponerlos en el foro te agradeceria por la informacion, algunas veces los
archivos ayudan mas de lo que uno cree.



Eso veo que ya has resuelto tu mismo :-)

La solucion que me pasas la copie en la celda "C2" de la hoja dias
laborados, reemplazando el "5" por el codigo "ID" del empleado que aparece
en la celda "A2" de la misma hoja, y me da como resultado "1", y ese
codigo
(183) ha trabajado 13 dias.
esta es la formula modificada
=SUMA(N(FRECUENCIA(SI($A$2:$A$100¢;$B$2:$B$100);$B$2:$B$100)>0))
en la celda "C2" de la hoja "Dias Laborados", ingrese tal cual y
matricial,
y da lo mismo "1"



Creo que has asumido que mi solucion anterior se basaba en tu archivo, pero
como te dije antes no habia podido verlo. Ahora al revisar tu ejemplo te
digo que las modificaciones que has introducido en mi formula NO son
suficientes. Los rangos que usa la formula pertenecen a la segunda tabla (la
base de datos 'Dias Laborados') y no a la del resumen donde todos los
registros son unicos (!) y por tanto es normal que te devuelvan 1 (no
crees?). Prueba la siguiente formula:

{=SUMA(N(FRECUENCIA(SI('Dias Laborados'!$A$2:$A$2000¢;'Dias
Laborados'!$B$2:$B$2000);'Dias Laborados'!$B$2:$B$2000)>0))}

Tambien podrias sustituir los rangos con nombres definidos con formulas que
capten los rangos dinamicamente. Por ejemplo, estando en la hoja 'Dias
Laborados' desde el menu Insertar>Nombre>Definir... defines:

Codigos =$A$2:INDICE($A:$A;COINCIDIR(1e307;$A:$A))
Dias =$B$2:INDICE($B:$B;COINCIDIR(1e307;$B:$B))

y luego usas esta formula:

{=SUMA(N(FRECUENCIA(SI(Codigos¢;Dias);Dias)>0))}

Y en todo caso dado que los rangos son importantes y la formula realiza
varias operaciones matriciales con ellos preparate a que el recalculo tarde
algo mas de lo habitual.

A continuacion te pongo un ejemplo basado en tu hoja:

http://www.telefonica.net/web/kl/SS...Unique.xls

Saludos,
KL
Respuesta Responder a este mensaje
#17 Gabriel Raigosa
16/03/2006 - 16:06 | Informe spam
Algo mas, con respecto al recalculo, la formula la dejo solo en la primera
celda, al final de mes o cuando se requiera se extiende, se calcula el
numero de dias trabajados y se convierte a valores, con esos valores y otros
datos se construye una tabla dinamica con un reporte completo por
trabajador.

Obtengo la cantidad de dinero a pagar y el numero de dias laborados, con esa
informacion debo calcular las prestaciones y otras cosas mas, apenas voy en
la mitad del trabajo.

Y nuevamente gracias por tu ayuda,

Gabriel Raigosa
Medellin - Colombia


"KL" escribio en el mensaje
news:
Hola Gabriel,

Seguro que si hay problemas para bajar el archivo de Exceluciones, si de
paso sabes donde puedo poner los archivos para que se puedan descargar y
no
ponerlos en el foro te agradeceria por la informacion, algunas veces los
archivos ayudan mas de lo que uno cree.



Eso veo que ya has resuelto tu mismo :-)

La solucion que me pasas la copie en la celda "C2" de la hoja dias
laborados, reemplazando el "5" por el codigo "ID" del empleado que aparece
en la celda "A2" de la misma hoja, y me da como resultado "1", y ese
codigo
(183) ha trabajado 13 dias.
esta es la formula modificada
=SUMA(N(FRECUENCIA(SI($A$2:$A$100¢;$B$2:$B$100);$B$2:$B$100)>0))
en la celda "C2" de la hoja "Dias Laborados", ingrese tal cual y
matricial,
y da lo mismo "1"



Creo que has asumido que mi solucion anterior se basaba en tu archivo, pero
como te dije antes no habia podido verlo. Ahora al revisar tu ejemplo te
digo que las modificaciones que has introducido en mi formula NO son
suficientes. Los rangos que usa la formula pertenecen a la segunda tabla (la
base de datos 'Dias Laborados') y no a la del resumen donde todos los
registros son unicos (!) y por tanto es normal que te devuelvan 1 (no
crees?). Prueba la siguiente formula:

{=SUMA(N(FRECUENCIA(SI('Dias Laborados'!$A$2:$A$2000¢;'Dias
Laborados'!$B$2:$B$2000);'Dias Laborados'!$B$2:$B$2000)>0))}

Tambien podrias sustituir los rangos con nombres definidos con formulas que
capten los rangos dinamicamente. Por ejemplo, estando en la hoja 'Dias
Laborados' desde el menu Insertar>Nombre>Definir... defines:

Codigos =$A$2:INDICE($A:$A;COINCIDIR(1e307;$A:$A))
Dias =$B$2:INDICE($B:$B;COINCIDIR(1e307;$B:$B))

y luego usas esta formula:

{=SUMA(N(FRECUENCIA(SI(Codigos¢;Dias);Dias)>0))}

Y en todo caso dado que los rangos son importantes y la formula realiza
varias operaciones matriciales con ellos preparate a que el recalculo tarde
algo mas de lo habitual.

A continuacion te pongo un ejemplo basado en tu hoja:

http://www.telefonica.net/web/kl/SS...Unique.xls

Saludos,
KL
Respuesta Responder a este mensaje
#18 Gabriel Raigosa
18/03/2006 - 15:53 | Informe spam
Saludos KL.

Resulto una pregunta adicional con respecto a la solucion.

En este foro

http://www.exceluciones.com/portal/...;490#22490

Estan interesados en hacer el conteo de los valores unicos cuando se tiene
una columna con texto no con numeros, suponiendo que en vez de tener una
fecha que es el caso actual se tubiera, por ejemplo una referencia de un
producto, o un nombre, entonces en vez de decir 1-marzo-2006 dijera
"zapatos", en vez de decir 2-marzo-2006, fuera "camisas", etc.

Me imagino la situacion mas o menos de la siguiente manera; la base de datos
del ejemplo actual seria, por ejemplo, el codigo de un vendedor y el nombre,
y la segunda hoja, la que actualmente tiene las fechas, seria el nombre o
descripcion del producto, lo que interesaria saber es cuantos productos
diferentes vendio un vendedor, no cuantas veces lo vendio, entonces, el
vendedor de codigo "5" vendio "8" productos diferentes, la pregunta resuto
ya que algun usuario intento aplicar la soluci??on a una columna que
contiene texto, y la funcion frecuencia se puede aplicar a columnas con
numeros.

Para resolver esta situacion alguien sugirio esta funcion

=SUMAPRODUCTO(--('Dias Laborados'!$A$2:$A$1543=$A2),--(COINCIDIR('Dias
Laborados'!$A$2:$A$1543&'Dias Laborados'!$B$2:$B$1543,'Dias
Laborados'!$A$2:$A$1543&'Dias Laborados'!$B$2:$B$1543,0)=FILA('Dias
Laborados'!$A$2:$A$1543)-FILA('Dias Laborados'!$A$1)))

el problema es que el recalculo es muy demorado,

?Se te ocurre alguna otra forma de resolver el problema, alguna otra funcion
que se pueda emplear y que no consuma tanto tiempo?

El foro donde se planteo la pregunta esta en

http://www.exceluciones.com/portal/...;490#22490

QAP...

Gabriel Raigosa
Medellin - Colombia


"KL" escribio en el mensaje
news:
Hola Gabriel,

Seguro que si hay problemas para bajar el archivo de Exceluciones, si de
paso sabes donde puedo poner los archivos para que se puedan descargar y
no
ponerlos en el foro te agradeceria por la informacion, algunas veces los
archivos ayudan mas de lo que uno cree.



Eso veo que ya has resuelto tu mismo :-)

La solucion que me pasas la copie en la celda "C2" de la hoja dias
laborados, reemplazando el "5" por el codigo "ID" del empleado que aparece
en la celda "A2" de la misma hoja, y me da como resultado "1", y ese
codigo
(183) ha trabajado 13 dias.
esta es la formula modificada
=SUMA(N(FRECUENCIA(SI($A$2:$A$100¢;$B$2:$B$100);$B$2:$B$100)>0))
en la celda "C2" de la hoja "Dias Laborados", ingrese tal cual y
matricial,
y da lo mismo "1"



Creo que has asumido que mi solucion anterior se basaba en tu archivo, pero
como te dije antes no habia podido verlo. Ahora al revisar tu ejemplo te
digo que las modificaciones que has introducido en mi formula NO son
suficientes. Los rangos que usa la formula pertenecen a la segunda tabla (la
base de datos 'Dias Laborados') y no a la del resumen donde todos los
registros son unicos (!) y por tanto es normal que te devuelvan 1 (no
crees?). Prueba la siguiente formula:

{=SUMA(N(FRECUENCIA(SI('Dias Laborados'!$A$2:$A$2000¢;'Dias
Laborados'!$B$2:$B$2000);'Dias Laborados'!$B$2:$B$2000)>0))}

Tambien podrias sustituir los rangos con nombres definidos con formulas que
capten los rangos dinamicamente. Por ejemplo, estando en la hoja 'Dias
Laborados' desde el menu Insertar>Nombre>Definir... defines:

Codigos =$A$2:INDICE($A:$A;COINCIDIR(1e307;$A:$A))
Dias =$B$2:INDICE($B:$B;COINCIDIR(1e307;$B:$B))

y luego usas esta formula:

{=SUMA(N(FRECUENCIA(SI(Codigos¢;Dias);Dias)>0))}

Y en todo caso dado que los rangos son importantes y la formula realiza
varias operaciones matriciales con ellos preparate a que el recalculo tarde
algo mas de lo habitual.

A continuacion te pongo un ejemplo basado en tu hoja:

http://www.telefonica.net/web/kl/SS...Unique.xls

Saludos,
KL
Respuesta Responder a este mensaje
#19 Gabriel Raigosa
18/03/2006 - 16:11 | Informe spam
Otra cosa adiconal, en la misma direccion
http://www.exceluciones.com/portal/...;490#22490
se puede bajar el archivo con una tercera columna en formato texto
asi no habra necesidad de ponerse en la tarea de generar otros datos

Gabriel Raigosa
Medellin - Colombia


"KL" escribio en el mensaje
news:
Hola Gabriel,

Seguro que si hay problemas para bajar el archivo de Exceluciones, si de
paso sabes donde puedo poner los archivos para que se puedan descargar y
no
ponerlos en el foro te agradeceria por la informacion, algunas veces los
archivos ayudan mas de lo que uno cree.



Eso veo que ya has resuelto tu mismo :-)

La solucion que me pasas la copie en la celda "C2" de la hoja dias
laborados, reemplazando el "5" por el codigo "ID" del empleado que aparece
en la celda "A2" de la misma hoja, y me da como resultado "1", y ese
codigo
(183) ha trabajado 13 dias.
esta es la formula modificada
=SUMA(N(FRECUENCIA(SI($A$2:$A$100¢;$B$2:$B$100);$B$2:$B$100)>0))
en la celda "C2" de la hoja "Dias Laborados", ingrese tal cual y
matricial,
y da lo mismo "1"



Creo que has asumido que mi solucion anterior se basaba en tu archivo, pero
como te dije antes no habia podido verlo. Ahora al revisar tu ejemplo te
digo que las modificaciones que has introducido en mi formula NO son
suficientes. Los rangos que usa la formula pertenecen a la segunda tabla (la
base de datos 'Dias Laborados') y no a la del resumen donde todos los
registros son unicos (!) y por tanto es normal que te devuelvan 1 (no
crees?). Prueba la siguiente formula:

{=SUMA(N(FRECUENCIA(SI('Dias Laborados'!$A$2:$A$2000¢;'Dias
Laborados'!$B$2:$B$2000);'Dias Laborados'!$B$2:$B$2000)>0))}

Tambien podrias sustituir los rangos con nombres definidos con formulas que
capten los rangos dinamicamente. Por ejemplo, estando en la hoja 'Dias
Laborados' desde el menu Insertar>Nombre>Definir... defines:

Codigos =$A$2:INDICE($A:$A;COINCIDIR(1e307;$A:$A))
Dias =$B$2:INDICE($B:$B;COINCIDIR(1e307;$B:$B))

y luego usas esta formula:

{=SUMA(N(FRECUENCIA(SI(Codigos¢;Dias);Dias)>0))}

Y en todo caso dado que los rangos son importantes y la formula realiza
varias operaciones matriciales con ellos preparate a que el recalculo tarde
algo mas de lo habitual.

A continuacion te pongo un ejemplo basado en tu hoja:

http://www.telefonica.net/web/kl/SS...Unique.xls

Saludos,
KL
Respuesta Responder a este mensaje
#20 KL
18/03/2006 - 20:17 | Informe spam
Hola Gabriel,

He puesto mi respuesta directamente en el foro mencionado. Aqui la repito para los que usan este grupo.

Saludos,
KL

'--
Gabriel Raigosa Escribio
Efectivamente la primera solucion expuesta un un mensaje anterior no funciona con texto y la segunda solucion SI funciona con texto.
=SUMAPRODUCTO(--('Dias Laborados'!$A$2:$A$1543=$A2),--(COINCIDIR('Dias Laborados'!$A$2:$A$1543&'Dias Laborados'!
$B$2:$B$1543,'Dias Laborados'!$A$2:$A$1543&'Dias Laborados'!$B$2:$B$1543,0)=FILA('Dias Laborados'!$A$2:$A$1543)-FILA('Dias Laborados'!
$A$1)))
Entonces la pregunta seria como optimizarla?, o cual otra funcion se pudiera emplear ya que el recalculo tarda tanto?





Hola chicos,

Hablando de calcular combinaciones unicas de cadenas de texto...

Dos noticias - una buena :-) y otra no tanto :-(

La buena es que la siguiente formula MATRICIAL (ojo - se introduce mediante Ctrl+Shift+Enter) parece que es 12 (!!!) veces mas rapida que la expuesta por Gabriel:

{=SUMA(--(FRECUENCIA(SI('Dias Laborados'!$A$2:$A$1543¢;COINCIDIR('Dias Laborados'!$B$2:$B$1543;'Dias Laborados'!$B$2:$B$1543;0));FILA('Dias Laborados'!$B$2:$B$1543)-1)>0))}

La mala - aun asi sigue siendo una formula lenta si se trata de rangos extensos y codigos de trabajador multiples. He hecho pruebas en un rango de 6000 filas y 500 codigos diferentes y las 500 instancias de la formula han tardado 156630.14 milisegundos en un P4 1.8MHz RAM 512KB.

Saludos,
KL
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida