Forums Últimos mensajes - Powered by IBM
 

post del 30-8-07 contar elementos

05/10/2007 - 23:13 por Jose | Informe spam
Saludos para todo el foro donde existen grandes maestros que nos ayudan un
montón en nuestro trabajo con excel.
En ete caso para KL que como siempre está ahí con sus geniales propuestas.
Gracias por la fórmula matricial que funciona estupendamente.
[=SUMA(--(FRECUENCIA(SI((comercial=$H$1)*(ramo£)*(cliente<>"");COINCIDIR(cliente;cliente;0));SI((comercial=$H$1)*(ramo£)*(cliente<>"");COINCIDIR(cliente;cliente;0)))>0))]
solo tengo un problema y es que para revisar la base de datos (tiene
casi 10.000 líneas x 18 columnas) y extraer los datos en una plantilla que
tiene 246 líneas y 5 columnas de comerciales, pues tarda de 4 a 5 horas por
columna y a veces lo dejo toda una noche para que resuelva una
columna...en fin que es desesperante... ¿se podría hacer de otra manera mas
rápida? ¿quizás con código VBA?.
La otra solución que aportas al final ( la de lista) ¿es mas rápida? no la
he probado porque no entiendo muy bien como hacerlo...
En fin gracias por todo siempre me habeis ayudado muchisimo en mis análisis
de resultados sobre mi equipo de comerciales y obtengo muy buena información
para preparar las acciones de futuro. Gracias de nuevo. Estos son los datos
de mi equipo de casa. (INFORMACIÓN DEL SISTEMA)

Nombre del sistema operativo Microsoft Windows XP Home Edition
Versión 5.1.2600 Service Pack 2 Compilación 2600
Fabricante del sistema operativo Microsoft Corporation
Nombre del sistema JRFL-VWY0MRFX60
Fabricante del sistema Fujitsu Siemens
Modelo del sistema GA-8SGXLFS
Tipo de sistema Equipo basado en X86
Procesador x86 Family 15 Model 2 Stepping 9 GenuineIntel ~2813 MHz
Procesador x86 Family 15 Model 2 Stepping 9 GenuineIntel ~2813 MHz
BIOS Versión/Fecha Award Software International, Inc. F5, 24/09/2003
Versión de SMBIOS 2.3
Directorio de Windows C:\WINDOWS
Directorio del sistema C:\WINDOWS\system32
Dispostivo de inicio \Device\HarddiskVolume1
Configuración regional España
Capa de abstracción de hardware Versión = "5.1.2600.2180
(xpsp_sp2_rtm.040803-2158)"
Nombre de usuario XXXXXXXXXXXXXXXXXXXXX
Zona horaria Hora estándar romance
Memoria física total 1.024,00 MB
Memoria física disponible 434,85 MB
Memoria virtual total 2,00 GB
Memoria virtual disponible 1,96 GB
Espacio de archivo de paginación 3,90 GB
Archivo de paginación C:\pagefile.sys

Saludos
Jose de Valencia









"KL" <NOSPAMlapink2000@PLEASEhotmail.com> escribió en el mensaje
news:D64DED8A-2906-4ECA-9B7D-C6A7DF62D1D4@microsoft.com...

Hola chicos,

Jose wrote:



=SUMAPRODUCTO((comercial=H1)*(ramo£)*(cliente>1))






KL wrote:


=SUMA(--(FRECUENCIA(SI((comercial=H1)*(ramo£);cliente);SI((comercial=H1)*(ramo£);cliente))>0))




Jose wrote:


Lo siento pero la formula no dice/hace nada (celda en blanco).




Héctor Miguel wrote:

la formula propuesta por KL...
funciona tanto para busqueda y conteo/suma de valores numericos como
alfanumericos



1) Me parece poco probable que mi formula devuelva una celda en blanco -
solo hay dos opciones: valor numerico o valor de error (quizas Jose
debiera comprobar si tiene marcada la opcion 'no mostrar ceros', o bien ha
aplicado formatos condicionales para ocultar errores)

2) Otro posible problema que se me ocurre es que yo haya interpretado mal
el siguiente trozo de la formula que presento Jose al principio:
*(cliente>1). Mi interpretacion ha sido que la matriz "cliente" contiene
valores numericos. Tal vez con dicha expresion Jose se referia a otra
cosa.

3) La formula que habia propuesto formula solo funcionaria con clientes
numericos (p.ej. 1,2,3 etc.) . Para que contase los valores alfanumericos
habria que modificarla, por ej. asi:

=SUMA(--(FRECUENCIA(SI((comercial=H1)*(ramo£)*(cliente<>"");COINCIDIR(cliente;cliente;0));SI((comercial=H1)*(ramo£)*(cliente<>"");COINCIDIR(cliente;cliente;0)))>0))

4) Una forma de hacer que la formula parezca mas y corta y no requiera de
entrada matricial es la siguiente
- Crear un nombre definido (menu Insertar>Nombre>Definir...)
- Nombre: LISTA
- Se refiere a:
=SI((comercial=$H$1)*(ramo=$A$3)*(cliente<>"");COINCIDIR(cliente;cliente;0))
- En la hoja usar la siguiente formula con un simple Enter:
=SUMA(--(FRECUENCIA(LISTA;LISTA)>0))

Saludos,
KL

 

Leer las respuestas

#1 Héctor Miguel
06/10/2007 - 09:00 | Informe spam
hola, Jose !

no te voy a hacer un *cuento largo*... pero considera las siguientes condiciones a resolver para este caso en particular:

1) tienes en tu libro -al menos- 3 nombres [no se si dinamicos o estaticos] y cada uno con ~10,000 filas

2) de estos 3 nombres, requieres contar ciertos registros *unicos* y ademas *sujetos* a 3 condiciones:
a) que "comercial" sea igual al dato que pones en la celda '$H$1'
b) que "ramo" sea igual al dato que pones en la celda 'A3' [supongo que esta celda sera variable segun otro listado]
c) que "cliente" no se considere en la cuenta cuando haya celdas *vacias*
d) considerando que en cada re/calculo, los nombres son re-evaluados por excel...
y que el tiempo de re/calculo es proporcional al numero de celdas que intervienen...
-> no se que tan *indispensable* sea seguir considerando la -posible o segura ?- existencia de celdas vacias -???-

3) para el *extracto* con la cuenta de *unicos* tienes otro listado de ~246 filas y 5 columnas de *comerciales*

hasta este punto, podemos hablar de las siguientes caracteristicas:
a) tienes +/- 1,230 formulas [las celdas en las ~246 filas y 5 columnas]
b) cada formula *recorre* las ~10,000 filas POR CADA LLAMADA que tenga la formula a cada nombre
c) la formula que expones, contiene DOCE llamadas a los nombres ["comercial", "ramo" y "cliente"]
d) en resumen, estamos hablando de ~ 147 millones 600 mil *evaluaciones* que se hacen en este *extracto/listado/...*
e) haria falta *evaluar* cual es el orden de resolucion [o re/calculo] que siga tu modelo y/o la version de excel que usas -?-

en via de mientras [y antes de buscar alguna posibilidad de solucion por codigos]...
prueba con alguna de las siguientes 2 alternativas [tratando de recortar formula y llamadas a los nombres]...

op1: con solo 6 llamadas a los nombres:
=contar(1/frecuencia(si(comercial=$h$1,si(ramo£,si(cliente<>"",coincidir(cliente,cliente,0)))),fila(ramo)-2+1))

op2: con solo 7 llamadas a los nombres:
=suma(--(frecuencia(si(comercial=$h$1,si(ramo£,si(cliente<>"",coincidir(cliente&"",cliente&"",0)))),coincidir(cliente&"",cliente&"",0))>0))

la *desventaja* de la opcion 1, es que require *descontar* la fila donde se inicia el rango nombrado...
-> observa la parte final de la formula, donde dice: -> -2+1
o sea, estoy suponiendo que tus rangos nombrados inician en la fila 2 [omitiendo la fila 1 como titulos o encabezados] -???-

no se que tanto puedas *ganar* [o no] en tiempo de re/calculo de tu modelo -?- [asi que]...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Saludos para todo el foro ...
En ete caso para KL que como siempre esta ahi con sus geniales propuestas.
Gracias por la formula matricial que funciona estupendamente.
[=SUMA(--(FRECUENCIA(SI((comercial=$H$1)*(ramo£)*(cliente<>"");
COINCIDIR(cliente;cliente;0));SI((comercial=$H$1)*(ramo£)*(cliente<>"");COINCIDIR(cliente;cliente;0)))>0))]
solo tengo un problema y es que para revisar la base de datos (tiene casi 10.000 lineas x 18 columnas)
y extraer los datos en una plantilla que tiene 246 lineas y 5 columnas de comerciales... tarda de 4 a 5 horas por columna
y a veces lo dejo toda una noche para que resuelva una columna...en fin que es desesperante...
se podria hacer de otra manera mas rapida? quizas con codigo VBA?.
La otra solucion que aportas al final (la de lista) es mas rapida? no la he probado porque no entiendo muy bien como hacerlo...
En fin gracias por todo siempre me habeis ayudado muchisimo en mis analisis de resultados sobre mi equipo de comerciales
y obtengo muy buena informacion para preparar las acciones de futuro. Gracias de nuevo.
Estos son los datos de mi equipo de casa. (INFORMACION DEL SISTEMA) [... omitido ...]



__ las consultas anteriores __
KL escribio en el mensaje ...
Jose wrote:
=SUMAPRODUCTO((comercial=H1)*(ramo£)*(cliente>1))






KL wrote:
=SUMA(--(FRECUENCIA(SI((comercial=H1)*(ramo£);cliente);SI((comercial=H1)*(ramo£);cliente))>0))




Jose wrote:
Lo siento pero la formula no dice/hace nada (celda en blanco).




Héctor Miguel wrote:
la formula propuesta por KL...
funciona tanto para busqueda y conteo/suma de valores numericos como alfanumericos



1) Me parece poco probable que mi formula devuelva una celda en blanco -
solo hay dos opciones: valor numerico o valor de error
(quizas Jose debiera comprobar si tiene marcada la opcion 'no mostrar ceros'
o bien ha aplicado formatos condicionales para ocultar errores)

2) Otro posible problema que se me ocurre es que yo haya interpretado mal
el siguiente trozo de la formula que presento Jose al principio: *(cliente>1).
Mi interpretacion ha sido que la matriz "cliente" contiene valores numericos.
Tal vez con dicha expresion Jose se referia a otra cosa.

3) La formula que habia propuesto formula solo funcionaria con clientes numericos (p.ej. 1,2,3 etc.).
Para que contase los valores alfanumericos habria que modificarla, por ej. asi:

=SUMA(--(FRECUENCIA(SI((comercial=H1)*(ramo£)*(cliente<>"");COINCIDIR(cliente;cliente;0));
SI((comercial=H1)*(ramo£)*(cliente<>"");COINCIDIR(cliente;cliente;0)))>0))

4) Una forma de hacer que la formula parezca mas y corta y no requiera de entrada matricial es la siguiente
- Crear un nombre definido (menu Insertar>Nombre>Definir...)
- Nombre: LISTA
- Se refiere a:
=SI((comercial=$H$1)*(ramo=$A$3)*(cliente<>"");COINCIDIR(cliente;cliente;0))
- En la hoja usar la siguiente formula con un simple Enter:
=SUMA(--(FRECUENCIA(LISTA;LISTA)>0))

Saludos,
KL

Preguntas similares