You are on page 1of 27

Ms sobre las funciones de bases de datos personalizadas

mircoles 25 de junio de 2008 Silvia, mi amiga auditora, me ha planteado otro reto Me pregunta! "#$e, si en e%cel tengo una relaci&n de personas, $ una serie de datos asociados a cada uno de ellos, 'c&mo puedo obtener las columnas en las (ue se obtienen determinados datos)" *omo as+, a bote pronto, $ sin un ejemplo claro, parece un problema un poco abstracto, procedimos a montar un supuesto para dejar claras las cosas ,l ejemplo era el siguiente!

-a pregunta era bien clara! "'c&mo puedo obtener las columnas en las (ue se obtienen determinados datos)" .ien, supongamos (ue (ueremos saber las veces (ue se obtiene el valor /, para todos esos usuarios ,n el caso de M01#-23#, el dato /, se obtiene en la columna 4 $ 5, como se puede ver en la tabla anterior 6ero en el caso de 57-0123#, el valor / no est presente en ninguna de las columnas -a cuesti&n era crear un macro o una f&rmula (ue nos permitiera determinar las columnas en las (ue obtenemos el dato (ue bus(uemos 0l final decid+ montar una funci&n, a la (ue he llamado localizar, $ (ue tiene el siguiente c&digo!

5unction -ocalizar8rango 0s 9ange, valor 0s :ariant; <fichamos la celda donde estn los datos <inicial $ final 8el rango, vamos; mi=rango > rango 0ddress <separamos los datos inicial $ final coordenadas > Split8mi=rango, "!"; inicio > coordenadas80; fin > coordenadas8/; <pasamos a una variable la direcci&n de la celda inicial celda > 9ange8inicio; 0ddress <para todo el rango de datos 5or i > 0 3o 9ange8fin; *olumn ? 9ange8inicio; *olumn <*omprobamos el valor introducido 2f 9ange8celda; > valor 3hen columna > columna @ " " @ 9ange8celda; 0ddress <eliminamos el signo de A de referencia absoluta columna > 9eplace8columna, "A", ""; ,nd 2f <pasamos a la siguiente columna celda > 9ange8celda; #ffset80, /; 0ddress <seguimos con el bucle 1e%t <Si no e%iste el dato en ninguna columna 2f columna > 0 3hen columna > " 1o e%iste" <eliminamos los nBmeros de la fila numeros > 0rra$80, /, 2, C, D, 5, E, F, 8, G; 5or j > 0 3o 7.ound8numeros; columna > 9eplace8columna, numeros8j;, ""; 1e%t <asignamos a la funci&n, el dato del contador <eliminando previamente el primer espacio vac+o -ocalizar > Mid8columna, 2; ,nd 5unction

*omo veis en la primera l+nea de la funci&n, aparecen dos argumentos! el rango, $ el valor ,l rango es precisamente, el rea donde tenemos los datos, mientras (ue el valor es el dato (ue buscamos -a f&rmula nos devolver las letras correspondientes a las columnas donde aparezca ese valor 6or ejemplo, si buscamos las columnas donde aparece el valor /, para M01#-23#, deberemos seleccionar como rango, el rea comprendida entre *D $ HD, por lo (ue la funci&n la llamaremos as+! *omo veis en la primera l+nea de la funci&n, aparecen dos argumentos! el rango, $ el valor ,l rango es precisamente, el rea donde tenemos los datos, mientras (ue el valor es el dato (ue buscamos -a f&rmula nos devolver las letras correspondientes a las columnas donde aparezca ese valor 6or ejemplo, si buscamos las columnas donde aparece el valor /, para M01#-23#, deberemos seleccionar como rango, el rea comprendida entre *D $ HD, por lo (ue la funci&n la llamaremos as+! *omo veis en la primera l+nea de la funci&n, aparecen dos argumentos! el rango, $ el valor ,l rango es precisamente, el rea donde tenemos los datos, mientras (ue el valor es el dato (ue buscamos -a f&rmula nos devolver las letras correspondientes a las columnas donde aparezca ese valor 6or ejemplo, si buscamos las columnas donde aparece el valor /, para M01#-23#, deberemos seleccionar como rango, el rea comprendida entre *D $ HD, por lo (ue la funci&n la llamaremos as+!

>localizar8*D!HDI/;

Si lo preferimos, tambin podemos utilizar como valor, las coordenadas de la celda donde tenemos el dato a buscar 6or ejemplo, si en la celda 0/ tuviramos un /, podr+amos haber escrito la funci&n, tal $ como la hemos escrito antes, o bien de esta otra forma!

>localizar8*D!HDI0/;

*omo podis ver en la imagen siguiente, aparece a la derecha la f&rmula localizar, donde nos devuelve como resultado, las columnas donde aparece el valor buscado Si no se encuentra el valor, simplemente nos imprimir en pantalla el te%to No existe, tal $ como tambin podis ver en la imagen!

4esde a(u+ podis descargar el fichero de e%cel, con el ejemplo (ue os presento, $ por supuesto, con la funci&n $ el c&digo de este art+culo Publicado por Javier Marco

:alidaci&n de listas dependientes

mircoles /0 de septiembre de 2008

.ajo el nombre de validacin de listas dependientes , os e%plicar como podemos validar datos de forma automtica en una lista desplegable, (ue a su vez re(uiera de la interacci&n con otra lista desplegable Supongamos (ue tenemos dos listas de datos, una lista corresponder a los datos padre $ la otra a los datos hijos 4ependiendo de los datos padre (ue seleccionemos en el desplegable, nos aparecern unos u otros datos hijos de forma automtica *omo esto parece algo farragoso, ser mejor e%plicarlo con un sencillo ejemplo Supongamos (ue tenemos varias marcas de autom&viles, $ en cada una de ellas, tenemos un grupo de modelos de cada marca 0lgo as+ como esto!

-o (ue pretendemos hacer a partir de esos datos, es montar dos listas desplegables, una con las marcas de autom&viles, $ otra con los modelos de cada una de las marcas, de tal forma (ue si elegimos una marca en concreto, en la otra lista solo nos aparezcan los modelos de esa marca -o primero (ue haremos ser crear la lista de validaci&n de las marcas de autom&viles, para (ue nadie pueda introducir marcas (ue no tengamos en nuestro listado 8recordemos (ue estamos validando datos; 6ara ello, nos situaremos por ejemplo en la celda ,/2, $ lo (ue haremos ser definir la lista desde el menB Datos, eligiendo a continuaci&n Validacin, $ en la pestaJa Configuracin, (ue es la (ue nos saldr por defecto en primer plano, elegiremos en Permitir la opci&n Lista, $ en Origen seleccionaremos el rango comprendido entre .C $ 4C (ue corresponde a los nombres de las marcas (ue tenemos, tal $ como se puede observar en la imagen anterior Si (ueris una a$uda grfica, lo (ue tenis (ue poner es esto (ue se ve en la siguiente imagen!

,s

decir,

habremos

creado

este

desplegable

en

,/2!

7na vez hecho esto, ahora solo nos (uedar crear el desplegable correspondiente a los modelos de cada marca 6ara ello, crearemos unos nombres, para cada grupo de modelos de cada marca ,sto es imprescindible, por(ue usaremos posteriormente la funci&n indirecto 8luego e%plicar para (ue nos va a servir; 6ara definir cada rango de datos con un nombre, la forma ms sencilla es hacer lo siguiente! Seleccionaremos cada grupo homogneo de modelos, partiendo por ejemplo con los modelos de coche de 5errari, $ seleccionando desde la celda .D hasta la .E 7na vez tengamos seleccionados los modelos 8ver la imagen siguiente;, tendremos (ue ponerles un nombre 1ecesariamente ese nombre debe coincidir con el (ue hemos utilizado en el encabezado de cada grupo, es decir, en este caso debe llamarse 5errari, Kno puede llamarse 6epito, ni 0udi 6ara ponerle un nombre a ese rango, tan solo deberemos escribirlo en la zona enmarcada en rojo, $ pulsar intro 8ver la siguiente imagen;!

Laremos lo mismo con el rango (ue va desde *D a *E, $ le pondremos como nombre la marca correspondiente, es decir, -amborghini 5inalmente haremos lo mismo con el rango de datos comprendido entre 4D $ 4F, al (ue le pondremos como nombre 6orsche 7na vez ha$amos definido todos los nombres, podremos comprobarlos 6ara ello nos situaremos en cual(uier celda, por ejemplo en ,E, $ desde el menB Insertar, seleccionaremos Nombre, $ a continuaci&n Definir Si lo hemos hecho todo correctamente, veremos algo como esto!

0hora $a tenemos todo lo necesario para crear la lista dependiente correspondiente a los modelos de cada marca 6ara ello nos situaremos en la celda ,/D, $ desde el menB Datos, elegiremos a continuaci&n Validacin, $ en la pestaJa Configuracin, (ue es la (ue nos saldr por defecto en primer plano, elegiremos en Permitir la opci&n Lista, $ en Origen escribiremos =INDIR C!"# $%&, tal $ como muestra la siguiente imagen!

-a funci&n indirecto, al utilizarla como origen de datos referenciada a la celda ,/2 (ue es donde tenemos las marcas de coches, lo (ue va a hacer es mostrarnos solo las correspondientes a la marca seleccionada 8recordemos (ue en ,/2 tenemos el primer desplegable donde seleccionaremos una marca en concreto; ,s decir, =INDIR C!"# $%& lo (ue va a hacer es buscar si e%iste un nombre 8recordemos (ue precisamente hemos definido para esto los nombres anteriores; 5errari, -amborghini, o 6orsche, $ nos va a mostrar los datos correspondientes a ese nombre, (ue en este caso coinciden $ adems de forma necesaria, con cada marca en cuesti&n, tal $ como comentbamos anteriormente Si lo hemos hecho todo correctamente, cada vez (ue seleccionemos una marca, el segundo desplegable, es decir, la lista dependiente 8pues la segunda, la de los modelos de coche, depende de la primera, es decir, de las marcas de autom&viles;, nos mostrar los modelos espec+ficos de la marca seleccionada 0lgo como lo (ue muestra la siguiente imagen!

5inalmente, para darle un to(ue de elegancia a nuestros desplegables, haremos (ue cada vez (ue se cambie la marca de coches, se elimine el modelo de veh+culo (ue hab+amos seleccionado anteriormente, si es (ue hemos estado jugando con los deplegables 6ara ello tan solo tendremos (ue copiar $ pegar este c&digo pero no en un m&dulo, sino en la 'o(a$, pues es en ella donde tenemos los desplegables!
6rivate Sub MorNsheet=*hange8.$:al 3arget 0s 9ange; <Si ha errores, (ue continBe #n ,rror 9esume 1e%t <Si cambiamos el dato de la celda ,/2, <limpiamos el segundo desplegable 2f 3arget *ells > 9ange8",/2"; 3hen <eliminamos el contenido de ,/D 9ange8",/D"; *lear*ontents ,nd 2f ,nd Sub

4esde a(u+ podis descargar el fichero de e%cel, con el ejemplo (ue os presento en este art+culo, para (ue podis ver en funcionamiento como se crean listas de validaci&n dependientes Publicado por Javier Marco

*onvertir segundos

unidades

de

tiempo!

horas,

minutos,

mircoles /C de agosto de 2008

0 veces nos es imprescindible convertir horas en minutos, o minutos en segundos, $ no sabemos como podemos conseguirlo de una forma sencilla $ sin complicaciones .ueno, pues ho$ os presento un par de funciones (ue nos ahorrarn estas conversiones 2maginemos (ue tenemos esto en una celda 8F horas, /2 minutos, $ D5 segundos;!

0F!/2!D5

Si deseamos mostrar en pantalla el formato de esa forma, tendremos (ue situarnos en esa celda, $ seleccionar desde el menB )ormato, la opci&n Celdas, $ en la pestaJa N*mero, (ue es la (ue nos saldr en primer plano, por defecto, aJadiremos dentro de la categor+a +ersonalizada, este formato! ,,-mm-ss, tal $ como se muestra en esta imagen!

0hora imaginemos (ue deseamos convertir esas horas, minutos, $ segundos, en una Bnica unidad de tiempo, por ejemplo, en ,oras 6ara ello, tan solo deberemos introducir esta f&rmula en cual(uier celda, e%cepto en a(uella donde tenemos el dato a convertir Suponiendo (ue tengamos el dato a convertir en la celda 4D, escribir+amos la f&rmula de la siguiente forma!

>L#9084D;O8M2173#84D;PE0;O8S,H714#84D;P8E0QE0;;

Si lo (ue deseamos es convertir esa unidad de tiempo, en minutos, deberemos introducir esta otra f&rmula!

>8L#9084D;QE0;OM2173#84D;O8S,H714#84D;PE0;

R si por el contrario, lo (ue deseamos es convertir esa unidad de tiempo, en segundos, deberemos introducir esta otra f&rmula!

>8L#9084D;Q8E0QE0;;O8M2173#84D;QE0;OS,H714#84D;

Si somos un poco ms atrevidos $ preferimos crearnos nuestras propias funciones en e%cel, podemos hacer algo como esto, para pasar todo a horas 8debemos copiar $ pegar estas funciones en un m&dulo;!

5unction pasarahoras8celda 0s 9ange;

dato > *4ate8celda; datos > Split8dato, "!"; horas > datos80; horas > horas O 8datos8/; P E0; horas > horas O 8datos82; P 8E0 Q E0;; pasarahoras > horas ,nd 5unction

,sta otra funci&n, nos servir para pasar el dato a minutos!

5unction pasaraminutos8celda 0s 9ange; dato > *4ate8celda; datos > Split8dato, "!"; minutos > datos80; Q E0 minutos > minutos O datos8/; minutos > minutos O 8datos82; P E0; pasaraminutos > minutos ,nd 5unction

R esta otra funci&n, nos servir para pasar el dato a segundos!

5unction pasarasegundos8celda 0s 9ange; dato > *4ate8celda; datos > Split8dato, "!"; segundos > datos80; Q E0 Q E0 segundos > segundos O 8datos8/; Q E0; segundos > segundos O datos82; pasarasegundos > segundos ,nd 5unction

6ara llamar a esas funciones personalizadas, por ejemplo a la (ue nos convierte el dato en horas, nos bastar con escribir algo como esto, en cual(uier celda!

>pasarahoras84D;

6ara pasar el dato a minutos, escribiremos esto otro!

>pasaraminutos84D;

R para pasar el dato a segundos, escribiremos esto otro!

>pasarasegundos84D;

3anto si utlizamos las funciones de tiempo propias de e%cel, como las funciones personalizadas (ue os propongo, el resultado (ue obtendremos ser e%actamente el mismo 4esde a(u+ podis descargar el fichero de e%cel, con el ejemplo (ue os presento en este art+culo, para (ue podis ver en funcionamiento como se convierten unidades de tiempo, de dos formas distintas, con las funciones propias de e%cel, o con funciones personalizadas Publicado por Javier Marco ,ti(uetas! formatos, funciones personalizadas

. comentarios/nnimo di(o000 /8 de agosto de 2008 /C!28 Lola, la verdad es (ue me has solucionado un (uebradero de cabeza importante pero tengo un problemilla Ro tengo un programa de fichajes (ue me indica el balance con el siguiente formato! D!C0 8D horas C0 minutos; como $o necesito pasarlo a minutos $ multiplicarlo por un valor para hallar el nBmero de euros he aplicado la f&rmula (ue indicas! >8L#9084E2;QE0;OM2173#84E2; ,l caso es (ue tengo un trabajador (ue ha hecho 2F horas e%tras en este mes 0l pasarlo a minutos, con esa f&rmula, no me salen los /E20 minutos correspondientes sino /80 (ue en realidad son C horas, las C horas ms por encima de 2D '*&mo puedo solucionarlo) Muchas 2sabel /nnimo di(o000 20 de agosto de 2008 /8!/D (u bueno este blog, por lo Btil 8ha$ mucho usuario de e%cel; $ lo bien publiado (ue est Savier Marco di(o000 2/ de agosto de 2008 /8!02 Lola 2sabel, te comento (ue lo (ue (uieres hacer, puede solucionarse de una forma un poco ms compleja Si e fijas, cuando pones como hora 2F!C0!00, en la barra de f&rmulas te aparece 0/P0/P/G00 C!C0!00, con lo (ue efectivamente, los clculos (ue se realizan, solo tiene en consideraci&n el tiempo transcurrido por encima de las 2D h 6ara solucionarlo, se me ha ocurrido esto -a celda donde tienes la hora 8en el ejemplo 2F!C0!00;, debe tener formato de te%to 8$a sabes, 5ormato ??T *eldas ??T *ategor+a 3e%to; 7na vez hecho eso, crate esta f&rmula personalizada 6ara ello, pulsa 0ltO5// para entrar en modo :.0, $ creas un m&dulo 82nsertar ??T M&dulo; 4entro del m&dulo copias esta f&rmula! 5unction datos minutillos minutillos 2f minutillos ,nd ,nd minutillos8celda 0s > Split8celda, > datos80; Q > minutillos O 7.ound8datos; > 2 > minutillos O 8datos82; 9ange; "!"; E0 datos8/; 3hen E0; 2f 5unction gracias

R eso es todo 0hora tan solo te (uedar llamar a la funci&n Suponiendo (ue tienes la hora en la celda 0/, pon por ejemplo en 02 esto! >minutillos80/;

R 7n

con saludo

eso,

resuelves Sigo de

el

problema vacaciones

6or cierto, gracias por vuestros comentarios a ambos usuarios Michelle di(o000 22 de agosto de 2008 2C!/F Me parecio, mu$ util la informaci&n $o trabajo constantemente con ,%cel $ este es un problema (ue siempre se me presenta, pero ahora $a esta mu$ claro Hracias Rafa di(o000 2G de agosto de 2008 /0!5C 6ues la verdad esde agradecer las molestias (ue te tomas en solucionar estos problemas Muchisssiiiimmas saludos 9afa carol di(o000 2G de agosto de 2008 /E!5G LolaU 3ienes 6ero no un encuentro e%ctamente blog lo (ue mu$ necesito 3e BtilU comento! gracias, compaJero

3engo un libro ,%cel con varias hojas de clculo en la primera estn unos presupuestos de todos los meses del aJo, $ en las siguientes una copia de cada mes con ms formulas aJadidas 6or lo (ue me gustar+a saber (ue ha$ (ue hacer para (ue cuando escriba algo en la /V hoja 8de la (ue he copiado cosas en la 2V %ej; me aparezca en la hoja donde he copiado esa celda Muchas SaludosU Hracias de antemanoUU

*onvertir segundos

unidades

de

tiempo!

horas,

minutos,

mircoles /C de agosto de 2008

0 veces nos es imprescindible convertir horas en minutos, o minutos en segundos, $ no sabemos como podemos conseguirlo de una forma sencilla $ sin complicaciones .ueno, pues ho$ os presento un par de funciones (ue nos ahorrarn estas conversiones 2maginemos (ue tenemos esto en una celda 8F horas, /2 minutos, $ D5 segundos;!

0F!/2!D5

Si deseamos mostrar en pantalla el formato de esa forma, tendremos (ue situarnos en esa celda, $ seleccionar desde el menB )ormato, la opci&n Celdas, $ en la pestaJa N*mero, (ue es la (ue nos saldr en primer plano, por defecto, aJadiremos dentro de la categor+a +ersonalizada, este formato! ,,-mm-ss, tal $ como se muestra en esta imagen!

0hora imaginemos (ue deseamos convertir esas horas, minutos, $ segundos, en una Bnica unidad de tiempo, por ejemplo, en ,oras 6ara ello, tan solo deberemos introducir esta f&rmula en cual(uier celda, e%cepto en a(uella donde tenemos el dato a convertir Suponiendo (ue tengamos el dato a convertir en la celda 4D, escribir+amos la f&rmula de la siguiente forma!

>L#9084D;O8M2173#84D;PE0;O8S,H714#84D;P8E0QE0;;

Si lo (ue deseamos es convertir esa unidad de tiempo, en minutos, deberemos introducir esta otra f&rmula!

>8L#9084D;QE0;OM2173#84D;O8S,H714#84D;PE0;

R si por el contrario, lo (ue deseamos es convertir esa unidad de tiempo, en segundos, deberemos introducir esta otra f&rmula!

>8L#9084D;Q8E0QE0;;O8M2173#84D;QE0;OS,H714#84D;

Si somos un poco ms atrevidos $ preferimos crearnos nuestras propias funciones en e%cel, podemos hacer algo como esto, para pasar todo a horas 8debemos copiar $ pegar estas funciones en un m&dulo;!

5unction pasarahoras8celda 0s 9ange;

dato > *4ate8celda; datos > Split8dato, "!"; horas > datos80; horas > horas O 8datos8/; P E0; horas > horas O 8datos82; P 8E0 Q E0;; pasarahoras > horas ,nd 5unction

,sta otra funci&n, nos servir para pasar el dato a minutos!

5unction pasaraminutos8celda 0s 9ange; dato > *4ate8celda; datos > Split8dato, "!"; minutos > datos80; Q E0 minutos > minutos O datos8/; minutos > minutos O 8datos82; P E0; pasaraminutos > minutos ,nd 5unction

R esta otra funci&n, nos servir para pasar el dato a segundos!

5unction pasarasegundos8celda 0s 9ange; dato > *4ate8celda; datos > Split8dato, "!"; segundos > datos80; Q E0 Q E0 segundos > segundos O 8datos8/; Q E0; segundos > segundos O datos82; pasarasegundos > segundos ,nd 5unction

6ara llamar a esas funciones personalizadas, por ejemplo a la (ue nos convierte el dato en horas, nos bastar con escribir algo como esto, en cual(uier celda!

>pasarahoras84D;

6ara pasar el dato a minutos, escribiremos esto otro!

>pasaraminutos84D;

R para pasar el dato a segundos, escribiremos esto otro!

>pasarasegundos84D;

3anto si utlizamos las funciones de tiempo propias de e%cel, como las funciones personalizadas (ue os propongo, el resultado (ue obtendremos ser e%actamente el mismo 4esde a(u+ podis descargar el fichero de e%cel, con el ejemplo (ue os presento en este art+culo, para (ue podis ver en funcionamiento como se convierten unidades de tiempo, de dos formas distintas, con las funciones propias de e%cel, o con funciones personalizadas Publicado por Javier Marco E comentarios ,ti(uetas! formatos, funciones personalizadas

Ms sobre las funciones de bases de datos personalizadas


mircoles 25 de junio de 2008 Silvia, mi amiga auditora, me ha planteado otro reto Me pregunta! "#$e, si en e%cel tengo una relaci&n de personas, $ una serie de datos asociados a cada uno de ellos, 'c&mo puedo obtener las columnas en las (ue se obtienen determinados datos)" *omo as+, a bote pronto, $ sin un ejemplo claro, parece un problema un poco abstracto, procedimos a montar un supuesto para dejar claras las cosas ,l ejemplo era el siguiente!

-a pregunta era bien clara! "'c&mo puedo obtener las columnas en las (ue se obtienen determinados datos)" .ien, supongamos (ue (ueremos saber las veces (ue se obtiene el valor /, para todos esos usuarios ,n el caso de M01#-23#, el dato /, se obtiene en la columna 4 $ 5, como se puede ver en la tabla anterior 6ero en el caso de 57-0123#, el valor / no est presente en ninguna de las columnas -a cuesti&n era crear un macro o una f&rmula (ue nos permitiera determinar las columnas en las (ue obtenemos el dato (ue bus(uemos 0l final decid+ montar una funci&n, a la (ue he llamado localizar, $ (ue tiene el siguiente c&digo!

5unction -ocalizar8rango 0s 9ange, valor 0s :ariant; <fichamos la celda donde estn los datos <inicial $ final 8el rango, vamos; mi=rango > rango 0ddress <separamos los datos inicial $ final coordenadas > Split8mi=rango, "!"; inicio > coordenadas80; fin > coordenadas8/; <pasamos a una variable la direcci&n de la celda inicial celda > 9ange8inicio; 0ddress <para todo el rango de datos 5or i > 0 3o 9ange8fin; *olumn ? 9ange8inicio; *olumn <*omprobamos el valor introducido 2f 9ange8celda; > valor 3hen columna > columna @ " " @ 9ange8celda; 0ddress <eliminamos el signo de A de referencia absoluta columna > 9eplace8columna, "A", ""; ,nd 2f <pasamos a la siguiente columna celda > 9ange8celda; #ffset80, /; 0ddress <seguimos con el bucle

1e%t <Si no e%iste el dato en ninguna columna 2f columna > 0 3hen columna > " 1o e%iste" <eliminamos los nBmeros de la fila numeros > 0rra$80, /, 2, C, D, 5, E, F, 8, G; 5or j > 0 3o 7.ound8numeros; columna > 9eplace8columna, numeros8j;, ""; 1e%t <asignamos a la funci&n, el dato del contador <eliminando previamente el primer espacio vac+o -ocalizar > Mid8columna, 2; ,nd 5unction

*omo veis en la primera l+nea de la funci&n, aparecen dos argumentos! el rango, $ el valor ,l rango es precisamente, el rea donde tenemos los datos, mientras (ue el valor es el dato (ue buscamos -a f&rmula nos devolver las letras correspondientes a las columnas donde aparezca ese valor 6or ejemplo, si buscamos las columnas donde aparece el valor /, para M01#-23#, deberemos seleccionar como rango, el rea comprendida entre *D $ HD, por lo (ue la funci&n la llamaremos as+! *omo veis en la primera l+nea de la funci&n, aparecen dos argumentos! el rango, $ el valor ,l rango es precisamente, el rea donde tenemos los datos, mientras (ue el valor es el dato (ue buscamos -a f&rmula nos devolver las letras correspondientes a las columnas donde aparezca ese valor 6or ejemplo, si buscamos las columnas donde aparece el valor /, para M01#-23#, deberemos seleccionar como rango, el rea comprendida entre *D $ HD, por lo (ue la funci&n la llamaremos as+! *omo veis en la primera l+nea de la funci&n, aparecen dos argumentos! el rango, $ el valor ,l rango es precisamente, el rea donde tenemos los datos, mientras (ue el valor es el dato (ue buscamos -a f&rmula nos devolver las letras correspondientes a las columnas donde aparezca ese valor 6or ejemplo, si buscamos las columnas donde aparece el valor /, para M01#-23#, deberemos seleccionar como rango, el rea comprendida entre *D $ HD, por lo (ue la funci&n la llamaremos as+!

>localizar8*D!HDI/;

Si lo preferimos, tambin podemos utilizar como valor, las coordenadas de la celda donde tenemos el dato a buscar 6or ejemplo, si en la celda 0/ tuviramos un /, podr+amos haber escrito la funci&n, tal $ como la hemos escrito antes, o bien de esta otra forma!

>localizar8*D!HDI0/;

*omo podis ver en la imagen siguiente, aparece a la derecha la f&rmula localizar, donde nos devuelve como resultado, las columnas donde aparece el valor buscado Si no se encuentra el valor, simplemente nos imprimir en pantalla el te%to No existe, tal $ como tambin podis ver en la imagen!

4esde a(u+ podis descargar el fichero de e%cel, con el ejemplo (ue os presento, $ por supuesto, con la funci&n $ el c&digo de este art+culo Publicado por Javier Marco 0 comentarios ,ti(uetas! funciones personalizadas

5unciones de bases de datos personalizadas


de 2008

mircoles /8 de junio

1o sab+a si llamar a este art+culo "a mi manera" en memoria de la clebre canci&n de 5ranN Sinatra, o bien llamarlo como lo he hecho 6osiblemente un t+tulo como el (ue finalmente he desestimado, atrajese ms curiosos, friNis, $ gente (ue se pierde por la red, pero menos pBblico interesado realmente por las posibilidades de e%cel, $ ms concretamente por la funciones de bases de datos, como la (ue ho$ nos ocupa nuevamente, la funci&n .4contar, origen de lo (ue ho$ os presento 3odo ha nacido gracias a mi buena amiga Silvia, una chica de culo in(uieto, (ue de vez en cuando delega en m+ el trabajo sucio *omo buena auditora de cuentas, dedica su tiempo al anlisis, $ no a las tareas de control repetitivas ,so implica (ue cuando tiene (ue controlar $ analizar un conjunto e%tenso de datos, recurra a su buen amigo Savier, el mismo (ue escribe estas l+neas, para (ue le solucione, si sabe ?cosa (ue rara vez ocurre?, alguna de sus dudas para tratar tan compleja $ abultada informaci&n Silvia me dijo! Wo$e, mira a ver si puedes solucionarme este problema (ue tengo, (ue (uiero acostarme pronto! tengo una base de datos en e%cel, con una serie de usuarios (ue se repiten unas cuantas veces 0 su derecha tenemos una columna, con el permiso (ue se le otorga a cada usuario, pero (ue puede ser variado, entre /dministrador $ 1suario, pudindose repetir cual(uiera de esos permisos, en las diferentes filas de la base de datos donde aparece ese usuario '6or (u no me creas una funci&n (ue determine las veces se le otorga uno $ otro permiso a ese usuario)X .ueno, creo (ue me toc& leer as+ como tres o cuatro veces la pregunta, para hacerme una idea de lo (ue (uer+a mi buena amiga Silvia 5inalmente, $ tras recibir su ejemplo, todo me (ued& mucho ms claro *oncretamente (uer+a saber cuntas veces obten+amos el permiso 0dministrador $ 7suario, para cada uno de los usuarios -a tabla originaria era de unas 2 000 filas, pero para nuestro ejemplo nos dar igual / (ue 50, por(ue nos bastar utilizar una f&rmula $ arrastrarla en tantas celdas como nos interese 0 lo (ue ibaK, la tabla originaria era esta!

7na de las posibilidades era crear un encabezado de datos, donde incluir+amos el nombre del usuario $ el permiso a evaluar 0lgo as+ como esto!

Si os fijis, en la celda *22 estamos evaluando las veces (ue se obtiene el permiso de /dministrador, para el usuario /ndrea, pues esos son los datos del encabezado, de .2 a *C, es decir, los criterios o las condiciones de bBs(ueda ,sta funci&n incorpora la novedad de (ue no se trata e%actamente de la funci&n 2Dcontar, sino de la funci&n 2Dcontara, (ue se diferencia de a(uella, en (ue esta permite el uso de datos de te%to, mientras (ue la funci&n .4contar, solo evalBa datos numricos ,sto tiene sus limitaciones, puesto (ue si tenemos 2 000 filas $ deseamos evaluar tanto las veces (ue tenemos permisos de /dministrador, como de 1suario, deberemos cambiar las celdas .C $ *C much+simas veces, tantas (ue se nos acabar la paciencia, $ encontraremos la funci&n .4contara realmente inBtil 'Yu podemos hacer para simplificar esta tarea) 6ues crearnos una funci&n personalizada 8o como la llama e%cel, una funci&n definida por el usuario; 4espus de dedicar un rato a analizar la tarea, $ tener bien claro (ue es lo (ue deb+amos incluir en la funci&n, acab obteniendo una funci&n en la (ue interven+an cuatro variables! / ? ,l rango de datos! en nuestro ejemplo, de .F a *20, pues son en esas celdas donde tenemos los datos

2 ? -a columna donde figura el criterio (ue (ueremos contar! en nuestro ejemplo (ueremos contar tanto las veces (ue aparece la palabra /dministrador como 1suario (ue aparecen en la segunda columna, por lo (ue deberemos informar (ue la columna a evaluar es la 2 C? D? ,l ,l primer segundo criterio criterio de de bBs(ueda! bBs(ueda! en en nuestro caso, el nombre del $Po usuario 1suario

nuestro

caso,

/dministrador

R la funci&n (ue obtuve, la llam Coincidencias, $ fue esta!

5unction *oincidencias8rango 0s 9ange, columna 0s 2nteger, = usuario 0s String, permiso 0s String; <fichamos la celda donde estn los datos <inicial $ final 8el rango, vamos; mi=rango > rango 0ddress <separamos los datos inicial $ final coordenadas > Split8mi=rango, "!"; inicio > coordenadas80; fin > coordenadas8/; <pasamos a una variable la direcci&n de la celda inicial celda > 9ange8inicio; 0ddress <para todo el rango de datos 5or i > 0 3o 9ange8fin; 9oZ ? 9ange8inicio; 9oZ <si el usuario coincide con el (ue <hemos introducido en la f&rmula 2f -*ase89ange8celda;; > -*ase8usuario; 3hen <comprobamos si el permiso es el (ue <hemos introducido en la f&rmula 2f -*ase89ange8celda; #ffset80, columna ? /;; > -*ase8permiso; 3hen <$ en ese caso, sumamos / contador > contador O / ,nd 2f ,nd 2f <pasamos a la siguiente fila celda > 9ange8celda; #ffset8/, 0; 0ddress <seguimos con el bucle 1e%t <asignamos a la funci&n, el dato del contador *oincidencias > contador ,nd 5unction

Si os fijis, en *2F tenemos esta funci&n!

>*oincidencias8A.AF!A*A20I2IA.2FI*A25;

5ijaos

en

la

siguiente

imagen!

*omo veis, .F!*20 es el rango 8est puesto en trminos absolutos, de ah+ el s+mbolo del A (ue incorpora;, la columna 2, el primer criterio (ue es .2F 80ndrea;, $ el segundo criterio (ue es *25 80dministrador; *omo podis comprobar, obtenemos el mismo dato (ue utilizando la funci&n 2Dcontara, pero de una forma ms sencilla ahora (ue $a tenemos definida la funci&n 6or eso nos bastar crear una tabla como la (ue he incluido $o desde .25 a 42G, o en el caso de tener muchos datos 8como as+ era en el ejemplo, pues ten+amos 2 000 filas;, tambin podemos poner la funci&n en una columna ane%a a la tabla de datos inicial, por ejemplo en la columna 4 Si lo hacemos de esta Bltima forma, podemos poner la funci&n con los criterios referidos al valor de una celda, o bien podemos ponerlos directamente en la f&rmula, de tal forma (ue esto (ue vamos a presentar a continuaci&n ser e%actamente lo mismo (ue lo (ue hemos visto anteriormente!

>*oincidencias8A.AF!A*A20I2I "0ndrea"I"0dministrador";

R no ha$ ms cera (ue la (ue arde ,spero (ue esta funci&n os ha$a sido tan Btil como le ha sido a mi amiga Silvia 4esde a(u+ podis descargar el fichero de e%cel, con todo el c&digo (ue os presento en este art+culo Publicado por Javier Marco D comentarios ,ti(uetas! funciones personalizadas

*alcular la letra del 125 8o del 412;

mircoles 2C de abril de 2008

Lo$ os presento una utilidad bastante sencilla, $ (ue muchos $a conocis, especialmente los espaJoles, pues esta utilidad es de aplicaci&n por estas tierras de 4ios :amos a tratar de obtener la letra del 125 81Bmero de 2dentificaci&n 5iscal; o la letra del 412 84ocumento 1acional de 2dentidad;, pues desde hace $a unos aJos, el 412 tambin incorpora la famosa letra de marras 0ntes de comenzar, veremos como se determina la letra (ue le corresponde a un 125 8o 412;, $ luego pondremos eso en prctica de diferentes formas! utilizando una funci&n personalizada, $ utilizando un macro 6ara calcular la letra, tomaremos el nBmero del 125 8o del 412;, $ lo dividiremos entre 2C, $ al

resto (ue obtengamos de esa divisi&n, le sumaremos / ,sa cifra nos servir para asignarle una letra al 125P412 ,l nBmero m%imo (ue obtendremos despus de hacer esa operaci&n, ser el 2D :eamos todo esto con un ejemplo prctico! Si tenemos el 125P412 nBmero C0 E55 F8D, con esta f&rmula (ue podemos poner en cual(uier celda, obtendremos ese nBmero!

>9,S247#8C0E55F8DI2C;O/

,n lugar de poner directamente en la f&rmula, el nBmero del 125P412, podemos poner la referencia a una celda 80/, 02C, ./2, M55, etc ;, siempre $ cuando, en esa celda tengamos el nBmero del 125P412 ,sa f&rmula de nuestro ejemplo, nos devuelve como cifra, el nBmero 5 0hora solo nos bastar obtener la letra a partir de ese nBmero, a travs de la siguiente tabla!

/>3 2>9 C>M D>0 5>H E>M F>R 8>5 G>6 /0 > 4 // > [ /2 > . /C > 1 /D > S /5 > \ /E > S /F > Y /8 > : /G > L 20 > 2/ > * 22 > ] 2C > , 2D > 3

Siguiendo con el ejemplo anterior, podemos observar (ue al 5, le corresponde la letra H, con lo cual, al 125P412 C0 E55 F8D, le corresponde la letra H :amos a ver como se puede resolver esto con una funci&n personalizada!

5unction -etra1258125 0s -ong; <*ontrolamos (ue no sea un nBmero <ma$or de 8 cifras 2f 125 > 0 #r 125 T GGGGGGGG 3hen -etra125 > "125 incorrecto" ,lse <4ividimos el 125 entre 2C, $ nos <(uedamos con el resto resto > 8125 Mod 2C; O / <la l+nea anterior la pod+amos haber complicado <poniendo esto otro! <resto > 125 ? 882nt8125 P 2C;; Q 2C; O / <0hora seleccionaremos la letra (ue <le corresponda al 125 introducido,

<dependiendo del resto obtenido Select *ase resto *ase /, 2D -etra125 > "3" *ase 2 -etra125 > "9" *ase C -etra125 > "M" *ase D -etra125 > "0" *ase 5 -etra125 > "H" *ase E -etra125 > "M" *ase F -etra125 > "R" *ase 8 -etra125 > "5" *ase G -etra125 > "6" *ase /0 -etra125 > "4" *ase // -etra125 > "[" *ase /2 -etra125 > "." *ase /C -etra125 > "1" *ase /D -etra125 > "S" *ase /5 -etra125 > "\" *ase /E -etra125 > "S" *ase /F -etra125 > "Y" *ase /8 -etra125 > ":" *ase /G -etra125 > "L" *ase 20 -etra125 > "-" *ase 2/ -etra125 > "*" *ase 22 -etra125 > "]" *ase 2C -etra125 > "," ,nd Select ,nd 2f ,nd 5unction

R llamaremos a la funci&n, desde e%cel, de la siguiente forma!

>letra1258celda;

celda! corresponde a la celda donde tenemos el 125P412 80/2, .CC, M58, o la celda de (ue se trate;, aun(ue podemos poner directamente el 125P412 en la f&rmula, sin necesidad de referenciarlo a una celda Yuizs te preguntes! "'Se puede resumir esa funci&n, para (ue no sea tan larga)" -a respuesta es s+ :amos a aplicar esta otra funci&n (ue hace e%actamente lo mismo, pero con menos l+neas de c&digo 8ojo, a esta nueva funci&n la llamaremos "-etradel125", mientras (ue la (ue acabamos de ver se llama "-etra125";!

5unction -etradel1258125 0s -ong; <*ontrolamos (ue no sea un nBmero <ma$or de 8 cifras 2f 125 > 0 #r 125 T GGGGGGGG 3hen letradel1if > "125 incorrecto" ,lse <3enemos una constante (ue contiene las <posibles letras (ue puede tener un 125 -ista=de=letras > "39M0HMR564[.1S\SY:L-*]," <*ogemos el 125, lo dividimos entre 2C <$ nos (uedamos con el resto -uego <al resto le sumamos /, $ obtenemos de <la lista de letras, la (ue corresponda <con ese nBmero de 125 letradel1if > Mid8-ista=de=letras, 8125 Mod 2C; O /, /; ,nd 2f ,nd 5unction

R llamaremos a la funci&n, desde e%cel, de la siguiente forma!

>letradel1258celda;

celda! corresponde a la celda donde tenemos el 125P412 80/2, .CC, M58, o la celda de (ue se trate;, aun(ue podemos poner directamente el 125P412 en la f&rmula, sin necesidad de referenciarlo a una celda Si no (ueremos usarla con una funci&n, $ preferimos utilizar un inputbo% para (ue el usuario introduzca el 125P412, $ nosotros devolvamos la letra en una celda cual(uiera, podemos utilizar este procedimiento 8en el ejemplo pondremos la letra (ue le corresponda al 125P412 introducido, en la celda ./8;!

Sub calcular=letra=del=1258; 125 > 2nput.o%8"2ntroduce el 125 cu$a letra (uieres calcular!", "125"; <*ontrolamos (ue no sea un nBmero <ma$or de 8 cifras 2f 125 > 0 #r 125 T GGGGGGGG 3hen 9ange8"./8"; > "125 incorrecto" ,lse <3enemos una constante (ue contiene las <posibles letras (ue puede tener un 125 -ista=de=letras > "39M0HMR564[.1S\SY:L-*]," <*ogemos el 125, lo dividimos entre 2C <$ nos (uedamos con el resto -uego <al resto le sumamos /, $ obtenemos de <la lista de letras, la (ue corresponda <con ese nBmero de 125 9ange8"./8"; > Mid8-ista=de=letras, 8125 Mod 2C; O /, /; ,nd 2f ,nd Sub

'R si lo (ueremos a travs de un bonito 7ser5orm) ^^^Soder, s+ (ue ped+s cosasUUU .ueno, vale, a(u+ os dejo la otra opci&n, la de utilizar un 7ser5orm 6ara los (ue no lo sepan, a(u+ e%plico como crear un 7Ser5orm 6ara ello, crearemos un 7ser5orm como este 8doble clic en la imagen, para verla ms grande;, al (ue llamaremos -etra=125!

Laremos clic en el bot&n del 7ser5orm llamado "*alcular la letra", $ pegaremos este c&digo!

6rivate Sub *alcular-etra=*licN8; #n ,rror Ho3o 5in <Si el nBmero del 125 est vac+o 2f 1umero125 > ,mpt$ 3hen 1umero125 Set5ocus Msg.o% 8*hr8/C; O " 6or favor, introduce el nBmero del 1 2 5 " = O *hr8/C; O *hr8/C;;, vb#]#nl$, " 4atos incompletos" ,nd 2f <Si el nBmero del 125 no es numrico 2f 1ot 2s1umeric81umero125; 3hen <(ue elimine la entrada 1umero125 > ,mpt$ 1umero125 Set5ocus ,nd 2f <Si el nBmero del 125 tiene separador de miles, <lo env+a a la -inea/ 2f 1umero125 > 5ormat81umero125, "_,__0"; 3hen Ho3o -inea/ ,nd 2f <Si el formato es distinto del numrico 2f 1umero125 `T 5ormat81umero125, "__0"; 3hen <(ue elimine las entrada 1umero125 > ,mpt$ 3e%to2 *aption > ,mpt$ 3e%toC *aption > ,mpt$ 1umero125 Set5ocus ,nd 2f -inea/! <si el nBmero del 125 es numrico 2f 2s1umeric81umero125; 0nd 1umero125 T 0 3hen <le da formato con punto de millar 1umero125 > 5ormat81umero125, "__,__0"; <3enemos una constante (ue contiene las <posibles letras (ue puede tener un 125 -ista=de=letras > "39M0HMR564[.1S\SY:L-*]," <*ogemos el 125, lo dividimos entre 2C <$ nos (uedamos con el resto -uego <al resto le sumamos /, $ obtenemos de <la lista de letras, la (ue corresponda <con ese nBmero de 125 3e%to2 *aption > Mid8-ista=de=letras, 81umero125 Mod 2C; O /, /; <ponemos la eti(ueta correspondiente 3e%toC *aption > 1umero125 @ "?" @ 3e%to2 *aption ,nd 2f 5in! ,nd Sub

Susto debajo de ese c&digo, pondremos este otro!

6rivate Sub 1umero125=,nter8; #n ,rror Ho3o 5in <eliminamos las entradas 1umero125 > ,mpt$ 3e%to2 *aption > ,mpt$ 3e%toC *aption > ,mpt$ 5in! ,nd Sub

R este otro!

6rivate Sub 1umero125=Mouse4oZn8.$:al .utton 0s 2nteger, = .$:al Shift 0s 2nteger, .$:al [ 0s Single, .$:al R 0s Single; #n ,rror Ho3o 5in <eliminamos las entradas 1umero125 > ,mpt$ 3e%to2 *aption > ,mpt$ 3e%toC *aption > ,mpt$ 5in! ,nd Sub

R este otro tambin!

6rivate Sub cerrar=*licN8; #n ,rror Ho3o 5in <4escarga el formulario de la memoria 7nload Me 5in! ,nd Sub

R $a para finalizar, solo nos bastar incluir este c&digo en un m&dulo!

Sub calcular=letra=1258; #n ,rror Ho3o 5in -etra=125 ShoZ 5in! ,nd Sub

4esde a(u+ podis descargar el fichero de e%cel, con todo el c&digo (ue os presento en este art+culo Publicado por Javier Marco C comentarios ,ti(uetas! funciones personalizadas, macros en e%cel

,%traer la incial de cada palabra

jueves E de marzo de 2008

,sta funci&n personalizada (ue ho$ os presento, no es (ue tenga e%cesiva utilidad, pero bueno, nos sirve para aprender ms sobre el uso de vectores, o arra$s ,s lo (ue tiene ,%cel, (ue nos

permite construirnos nuestras propias funciones, de la misma forma (ue tenemos otras $a predefinidas, como S7M0, *#1309, S2, o 5,*L0, por poner solo unos ejemplos 2maginemos (ue tenemos en una columna, un listado con nombres de personas 8nombre $ dos apellidos;, $ (ue deseamos poner en la columna contigua, las iniciales de cada uno de los nombres 6odemos hacerlo a mano, de tal forma (ue si tenemos por ejemplo en la lista, una persona llamada Irene Hermosilla Martn, en la columna continua deberemos poner IHM, a mano 6ara hacerlo de una forma ms profesional, vamos a construir una funci&n (ue nos permita hacer eso de forma mucho ms rpida, para lo cual copiaremos $ pegaremos esto en un m&dulo!

5unction iniciales8celda 0s 9ange; <4escomponemos el te%to, en partes, <para lo cual indicamos el delimitador " ", aun(ue <por defecto, podr+amos haberlo omitido, pues es ese mismo <8espacio;, con lo cual tendremos tantas palabras, <como estn separadas por espacios te%to > Split83rim8celda;, " ", ?/, /; <miramos las palabras (ue componen el te%to, <para lo cual le decimos (ue recorra desde el primer <valor de la matriz 8empieza en cero;, hasta el m%imo <valor 8na de la Bltima palabra; (ue lo obtenemos con el 7.ound 5or i > 0 3o 7.ound8te%to; <ponemos la inicial en ma$Bsculas, $ el resto <de las letras, simplemente no nos interesan te%to8i; > 7*ase8-eft8te%to8i;, /;; 1e%t <7nimos los te%tos, con la funci&n Soin te%to > Soin8te%to; <(uitamos el espacio (ue separa las iniciales te%to > 9eplace8te%to, " ", ""; <pasamos los datos a la funci&n iniciales > te%to ,nd 5unction

'R como llamamos a esa funci&n) 6ues simplemente as+!

>iniciales8celda;

celda! corresponde a la celda, cu$as iniciales deseamos e%traer 80/2, .CC, M58, o la celda de (ue se trate; Le a(u+ un ejemplo donde ponemos en la fila de abajo, las iniciales del nombre (ue aparece justo encima 5ijaos en la barra de f&rmulas donde aparece lo de =iniciales#23&!

Publicado por Javier Marco 2 comentarios ,ti(uetas! funciones personalizadas, macros en e%cel

*ontar palabras

martes /G de febrero de 2008

,n una entrega anterior, vimos como se pod+an contar caracteres, a travs de una funci&n personalizada (ue hab+amos creado ,sta vez haremos algo parecido, pero en lugar de contar caracteres, contaremos palabras enteras, despreciando los signos de puntuaci&n, por si los colocamos incorrectamente

5unction contarpalabras8celda 0s 9ange; <si ponemos un espacio antes de los signos de <puntuaci&n, mejor los eliminamos del c&mputo datos > 9eplace8celda, " ", ""; datos > 9eplace8datos, ",", ""; datos > 9eplace8datos, "I", ""; datos > 9eplace8datos, "!", ""; <reemplazamos los posibles dobles espacios datos > 9eplace8datos, " ", " "; <eliminamos los espacios inicial $ final datos > 3rim8datos; <4escomponemos la cadena, en subcadenas, <para lo cual indicamos el delimitador " ", aun(ue <por defecto, podr+amos haberlo omitido, <pues es ese mismo 8espacio; palabras > Split8datos, " "; <.uscamos el m%imo de palabras (ue se han <formado, $ le sumamos /, por(ue el arra$ <comienza a contar desde cero numero=de=palabras > 7.ound8palabras; O / <asignamos ese m%imo a la funci&n contarpalabras > numero=de=palabras ,nd 5unction

3an solo nos (uedar llamar a la funci&n desde nuestra hoja de clculo de e%cel, para lo cual, nos bastar con introducirla de la siguiente forma!

>contarpalabras8celda;

celda! corresponde a la celda, cu$os caracteres (ueremos contar 80/, 05, .C5, 0./EF, o la (ue sea; R nos (uedar algo como esto (ue vemos en pantalla!

Publicado por Javier Marco D comentarios ,ti(uetas! funciones personalizadas, macros en e%cel

*ontar el nBmero de caracteres

mircoles 2C de enero de 2008

Lo$ os presento una funci&n (ue nos puede servir para contar el nBmero de caracteres (ue tiene una cadena de te%to, sin contar los espacios en blanco 8si (ueremos contar tambin los espacios en blanco, tan solo tendremos (ue cambiar ligeramente el c&digo (ue os propongo, tal $ como aparece en la segunda funci&n; 6ara ello, construiremos una funci&n (ue nos ahorrar tiempo $ trabajo *omenzaremos entrando en modo :.0, $a sabis, /lt 4 )$$, $ creando un m&dulo donde introduciremos el siguiente c&digo!

5unction contarsinespacios8celda 0s range; <9eemplazamos los espacios vac+os por nada, <es decir, los eliminamos, pero solo a efectos <del clculo del na de caracteres mi=te%to > 9eplace8celda, " ", ""; <*ontamos los caracteres (ue ha$, ahora (ue tenemos el <te%to en la variable mi=te%to, el te%to sin espacios vac+os cantidad=de=te%to > -en8mi=te%to; <ponemos el nBmero de caracteres en la celda <donde tenemos esta funci&n 8la f&mula; contarsinespacios > cantidad=de=te%to ,nd 5unction

0hora solo tendremos (ue llamar a la funci&n, de la misma forma (ue llamamos por ejemplo a la funci&n S7M0!

>contarsinespacios8celda;

celda! corresponde a la celda, cu$os caracteres (ueremos contar 80/, 05, .C5, 0./EF, o la (ue sea;

Le

a(u+

un

ejemplo

grfico

(ue

lo

aclarar

todo!

Si deseamos (ue la funci&n nos cuente tambin el nBmero de espacios en blanco, tan solo tendremos (ue adaptar la funci&n anterior, a esta nueva forma 8ojo, (ue tambin le hemos cambiado el nombre a la funci&n;!

5unction contarconespacios8celda 0s range; <*ontamos los caracteres (ue ha$ cantidad=de=te%to > -en8celda; <ponemos el nBmero de caracteres en la celda <donde tenemos esta funci&n 8la f&mula; contarconespacios > cantidad=de=te%to ,nd 5unction

6ara llamar a la funci&n, lo haremos igual (ue en el ejemplo anterior!


>contarconespacios8celda;

celda! corresponde a la celda, cu$os caracteres (ueremos contar 80/, 05, .C5, 0./EF, o la (ue sea; Publicado por Javier Marco D comentarios

You might also like