MANUAL BSICO MACROS DE VISUAL BASIC PARA EXCELIntroduccin al
Visual Basic1 INRODUCCION !a "ro"sito d# Visual Basic$Visual Basic
para aplicaciones es una combinacin de un entorno de programacin
integradodenominado Editor de Visual Basic y del lenguaje de
programacin Visual Basic, permitiendodisear y desarrollar con
facilidad programas en Visual Basic. El trmino para aplicaciones
hacereferencia al hecho de que el lenguaje de programacin y las
herramientas de desarrollo estnintegrados con las aplicaciones del
Microsoft Office (en este caso, el Microsoft Excel), de formaque se
puedan desarrollar nuevas funcionalidades y soluciones a medida,
con el uso de estasaplicaciones.El Editor de Visual Basic contiene
todas las herramientas de programacin necesarias paraescribir cdigo
en Visual Basic y crear soluciones personalizadas.Este Editor, es
una ventana independiente de Microsoft Excel, pero tiene el mismo
aspecto quecualquier otra ventana de una aplicacin Microsoft
Office, y funciona igual para todas estasaplicaciones. Cuando se
cierre la aplicacin, consecuentemente tambin se cerrar la ventana
delEditor de Visual Basic asociada.5% OB&EIVOSLo que se
pretende con este manual es presentar de una manera prctica,
diferentes utilidades,funciones, sentencias., en el Editor de
Visual Basic, y que con posterioridad sern tiles para eldesarrollo
del ejercicio concreto de que consta la prctica.As, tomando
ejemplos sencillos, se irn mostrando sucesivamente las diferentes
utilidades arealizar o utilizar. Como, cmo definir un botn de
ejecucin de programa, cmo dar valores aceldas de la pgina de
Microsoft Excel (mediante un programa definido en el Editor de
VisualBasic), cmo definir e introducir bucles y condiciones,.'
DESARROLLO DE LOS E&EMPLOS'(1 Cr#acin d# un )*otn+ ,u# al
a"r#tarlo #scri*a -OLA(Vamos a crear un botn, que al hacer clic
sobre l, muestre en la celda A1 la expresin HOLA.Para ello, en
primer lugar, se instalar en el documento de Microsoft Excel, el
Cuadro deControles (Men Ver -> Barra de Herramientas ->
Cuadro de Controles). En l se tomar elicono representando un botn,
desplegndose en la Hoja1, por ejemplo, del documento Excel.6Una vez
hecho esto, se pulsar dos veces sobre dicho botn para accede as al
Editor de VisualBasic, con el que se realizar el pequeo programa
requerido, tal y como sigue:'(% Acu.ulacin d# )-OLA+/s #n la .is.a
c#lda(Ahora vamos a cambiar el programa anterior, cambiando una de
las lneas de programa, parahacer que cada vez que se hiciera un
clic en el botn, se acumulara un nuevo HOLA (igual quepodra ser
cualquier otro valor numrico o cadena de caracteres) al anterior.
De esta forma, seidentificar el contenido de la primera celda como
un contador, acumulndose, en cada clic sobreel botn, una nueva
cadena de texto en dicha celda contador.7'(' Acu.ulacin d# t#0to #n
1arias dia2onal#s suc#si1as(Ahora, continuando el ejemplo anterior,
vamos a definir una lista en varias diagonales, en las quese
mostrar el texto previamente definido (BENVNGUT). En la nueva
versin del programaanterior, se podr observar cmo utilizar la
funcin condicin (representada por la funcin if) yelbucle (mediante
la aplicacin de la funcin for, entre otras opciones).As, para hacer
que la palabra BENVNGUT aparezca colocada siguiendo varias
diagonales unnmero determinado de veces. Se definen, inicialmente,
dos variables contador como enteros(funcin Dim As Integer), y que
representan adems los ndices de las celdas de la Hoja deClculo
(filas y columnas). Se define el texto en la primera celda.
Seguidamente, se define lacondicin de que la suma de los ndices de
celda (variables contadores) sean nmeros pares, conla utilizacin de
la funcin mod (funcin resto, dividiendo el nmero requerido por dos,
si el resto es0, el nmero es par), as se tendran definidas las
diferentes diagonales. Esta condicin estaracolocada dentro de un
doble bucle for (bucle anidado), en el que el valor de cada nueva
celda dela diagonal, tendr el mismo valor que la anterior.8'(3
Pro2ra.acin d# s#ri#s d# 4i*onacci(Programacin de una serie numrica
(en este caso la de Fibonacci), con el diagrama de
barrascorrespondiente. En este caso, vamos a desarrollar un
programa que cumplir las siguientescaractersticas:Utilizacin de una
serie de Fibonacci de nmeros aleatorios.Se tomarn exclusivamente la
cifra de unidades de los nmeros de la serie anterior.Se ordenarn
estos valores del mayor al menor (para poder trabajar con ellos)Se
mostrar cmo realizar el diagrama de barras correspondiente a la
serie anterior (cada barracon el tamao y el color correspondiente
al nmero de la serie)Y en l, se utilizarn adems las funciones y
opciones del Editor de Visual Basic / MicrosoftOffice
siguientes:Cambio de nombre de un botnUtilizacin y grabacin de
macrosUtilizacin de la funcin Call para llamar a una funcin
definida en otro lugar.Cambio de colorLa serie de Fibonacci cumple
que cada elemento de la serie es el resultado de la suma de los
dosprecedentes, es decir: an+2 = an+1 + anAs, se introducir la
frmula anterior mediante la utilizacin de un bucle Do WhileLoo (una
delas opciones posibles), previa definicin de los dos valores
iniciales. De esta forma, se van a definirestos valores iniciales
como aleatorios; para ello, se va a utilizar la funcin de generacin
de9nmeros aleatorios rnd (tal y como se ve en el programa) para
evitar nmeros excesivamentegrandes o en coma flotante, tomando la
variable como int, para evitar la aparicin de decimales.Adems, se
ve como se utiliza la funcin With, para definir la seleccin de
color. Este cdigo sehatomado del de la macro grabada a partir del
cambio de color de una celda cualquiera (mediantelautilizacin de la
opcin del men Cam!io de color)Pero, qu es una macro?, y, cmo se
graba una macro?En primer lugar, se debera considerar que una macro
es un pequeo programa ejecutable desdela Hoja de Clculo, y que
realiza funciones repetitivas o comunes en la normal ejecucin de
laactividad con la herramienta de clculo. As, y en el caso
particular de grabar una macro parapoder cambiar de color una serie
de celdas de la Hoja de Clculo, se procede de la siguienteforma. En
el men, se toma la opcin Herramientas, y en sta, "ra!ar macro. Acto
seguido, serealiza la accin a grabar en la macro, en este caso,
cambiar de color el color de una columna de10la hoja de clculo.En
el paso anterior se vea, en el cdigo definido por la macro, la
opcin #ange; en sta se defineel rango de aplicabilidad de la accin
seleccionada, en este caso el cambio de color.As, y una vez se
tiene este cdigo ya definido, se puede trabajar sobre l para
conseguir que cadacelda de dicha columna tenga un color diferente
al de los dems, pero elegido de forma aleatoria.De esta forma se
hara:Se cambian los valores de color obtenidos de la macro, por
valores aleatorios, mediante la funcinrandom $rnd%. Este cdigo
podra copiarse en el cdigo de programa de un botn, para ver comose
cambiara el color aleatoriamente, cada vez que se hiciera clic
sobre el segundo botn.11Siguiendo el paso anterior, se ve
claramente el efecto del cambio aleatorio de color al hacer
clicsobre el botn. Pero, cmo le hemos cambiado el nombre al
botn?Para ello, se selecciona el modo dise&o del cuadro de
controles, una vez as, se hara un cliccon el botn derecho del ratn,
sobre el botn al que se le quiere cambiar el nombre. Acto
seguido,se selecciona la opcin roiedades.12Una vez mostradas las
acciones anteriores, se va a pasar a definir el ejemplo concreto.
As, ycomo ya habamos dicho, vamos a definir el cdigo de programa
necesario para por un ladogenerar la serie de Fibonacci de trminos
aleatorios, y por el otro, tomar de los valores de la serieanterior
exclusivamente las cifras correspondientes a las unidades.Aqu
pueden observarse dos bloques diferenciados de programa, cada uno
para un botn diferente(que se pueden ver en la transparencia
siguiente). En el primero se crea una serie de Fibonacci, taly como
ya se ha explicado, y acto seguido, se reduce cada uno de los
nmeros de dicha serie a sucifra de unidades. Esta sera el resto
obtenido de dividir dicho nmero de la serie original, por 10.13Esto
se consigue con la utilizacin de la funcin mod. Todo ello dentro de
su correspondientebucle para ir tomando todos los valores de la
serie.Se ve el resultado obtenido. Primero, haciendo clic en el
primer botn, se obtendra la serie, yseguidamente, haciendo clic
sobre el segundo botn, se obtiene la cifra correspondiente a la
cifrade unidades de la serie de Fibonacci anterior.Ahora, se deber
definir una funcin que tome una serie de nmeros y los ordene de
mayor amenor. Esto se hara mediante la grabacin de una macro
llamada ordenar, en la que se graba laaccin de ordenar (funcin
perteneciente al men datos de la barra de men) de mayor a menorlos
valores de la primera columna, se obtiene el cdigo de programa
necesario para implementarun tercer botn, por ejemplo (cdigo que se
ve abajo)14Serie numrica resultante de ordenar la serie de cifras
unidad de la serie de Fibonacci (en latransparencia anterior), y
obtenida al hacer el clic sobre el tercer botn.Este seria el ltimo
del conjunto de programas individuales (definidos mediante
botones), con elseconseguira el objetivo buscado.En la pgina
siguiente se muestra el cdigo correspondiente al diagrama de
barrascorrespondiente a los valores de la serie anterior.Este cdigo
muestra, despus de un corto programa para borrar el diagrama que
pueda existir conanterioridad (obtenido a partir del cdigo de la
macro grabada durante el borrado de un diagramacon las dimensiones
requeridas, dndole al color el valor sin relleno), como hacer el
diagramadebarras.Primeramente, se define que el nmero de celdas a
colorear (barras del diagrama), sea igual alnmero de la serie en
cada fila. Despus, se define una condicin para evitar colorear una
celda dela primera columna, cuando se tuviera un cero. Adems, se
define que el color corresponda alnmero presente en cada celda,
pero evitando el negro (correspondiente al 0), y el
blanco(correspondiente al 1)15Tras lo definido anteriormente, y
haciendo clic sobre el cuarto botn, se obtendra el diagrama deGantt
correspondiente a la serie previamente calculada, cambiando cada
vez que se ejecutara todoel proceso completo. Botn 1 -> Botn 2
-> Botn 3 -> Botn 416Una vez realizado lo anterior, vamos a
mostrar como emplear la funcin de Visual Basic, Call. Conesta
funcin lo que pretendemos, es poder hacer llamadas desde dentro de
un programa a otroque puede ser utilizado varias veces, y de esta
forma, evitaramos tener que definir el programacorrespondiente cada
vez.En este caso, vemos como una vez definida la serie de Fibonacci
(de la misma forma que ya sehavisto previamente en varias
ocasiones, siguiendo el mismo ejemplo), se introducen tres llamadas
aotras tantas funciones independientes previamente definidas (como
se ha visto en lastransparencias precedentes), mediante la funcin
call.17As, una vez calculada mediante el bucle Do While la serie de
Fibonacci, se llamara inicialmente ala funcin #educci'. Esta, como
ya se ha visto, tomara el resultado anterior, reducindolo a lacifra
de unidades correspondiente a cada uno de los elementos de la serie
anterior.Se vera, de la misma forma que se vea en un punto
anterior, como con la utilizacin de la funcinresto mod, entre 10,
conseguimos tomar o reducir la cifra correspondiente a las unidades
de loselementos de la serie de Fibonacci previamente calculada.A
continuacin, se llama a la funcin Ordrenar, que realizar la
ordenacin de los elementos de laserie numrica previamente
calculada, de mayor a menor (siendo este cdigo obtenido, como yase
haba explicado, a partir de la grabacin de una macro utilizando la
funcin ordenar del men).Tomando como rango de elementos a ordenar,
la primera columna (A), desde la celda 1 a la 15,eneste caso.18La
ltima llamada realizada desde la funcin principal, sera la
realizada a la funcin encargadadedefinir el diagrama de barras, en
tamao y en color, adems de definir otra subfuncin que seencargara
de borrar el diagrama anterior, cada vez que se hiciera clic en el
botn para obteneruna nueva serie y un nuevo diagrama de barras.Como
ya se ha explicado antes, se definira una funcin encargada de tomar
el valor de cada unode los elementos de la serie en la columna A,
luego, y mientras sta fuera diferente de 0, seentrara en el bucle,
en el se definira el tamao y el color de la barra en funcin del
nmero de laserie en cada posicin.193 NUEVOS E&EMPLOS5 OBENCI6N
DE N7MEROS PRIMOSUna vez visto todo lo realizado previamente, se va
a pasar a describir estos nuevos ejemplos. Enellos, vamos a mostrar
cmo hacer dos programas, el primero para saber si un nmero es
primo, yel segundo, para obtener listas de nmeros primos.Para esto,
en el primer programa, mostraremos que funciones se deben utilizar
para declararmens de trabajo, y cmo trabajar con ellas, adems de
cmo llamar a otras funciones sin utilizarla funcin que se haba
visto previamente para este propsito (funcin call). En el
segundoprograma, veremos de que forma se podrn declarar listas de
nmeros primos, en un nmeroindicado previamente por nosotros
mismos.Vamos a ver ahora que es lo que deberemos hacer para poder
declarar y utilizar mens de trabajo,aplicndolo de manera prctica
para poder declarar si un nmero dado al programa es primo o no.Como
se puede ver en la pantalla anterior del Editor de Visual Basic, el
programa previamentedescrito se ha dividido en dos partes. En la
parte que vemos aqu (declarada a partir del botn)mediante la funcin
InutBox, se declarar un men que se ver en la pgina de la Hoja
deClculo del Microsoft Excel, presentando el texto DME UN NUMERO,
identificado con lavariable numero definida como string. Esta
cadena (que recibe el nmero que se introduciradesde teclado)
mediante la funcin Val, registrar el valor numrico deseado que se
pasara a laotra funcin (la que calculara si dicho nmero es primo o
no).Una vez hecho esto, dentro de una condicin if, y utilizando la
funcin MsgBox (esta funcin, aligual que la previamente definida
InutBox, tiene como misin el mostrar en pantalla un mensajeen forma
de men de Windows, pero ahora presentando un resultado determinado
y definidodesde programa) se mostrara un mensaje sobre la Hoja de
Clculo, diciendo si el nmeropreviamente introducido es primo o
no.20Tal como se ha visto previamente, tomando el valor de la
variable (alor se llama a la funcinesrimo $x%, donde la variable x
equivale al valor enviado (alor. As, definiendo esta funcin
comoBoolean, la cual dara como resultado una respuesta verdadera o
falsa (true o false), se entraraen un bucle Do While (que utiliza
como condiciones que el nmero introducido es inicialmenteprimo,
para entrar en el bucle, y que el ltimo nmero por el que se dividir
el introducido, paracomprobar si es primo o no, deber ser menor o
igual a la raz cuadrada del introducido). En estebucle, dentro se
pondra una condicin if, en la que indica que para que un nmero no
sea primo,el resto de dividirlo por otro menor que l debe ser
cero.Como se puede comprobar, al trabajar con variables Booleanas,
se devuelve o recibe un )rue o un*alse, que en funcin de la
definicin de la condicin if del siguiente programa (el definido por
elbotn), se dar como resultado lo correspondiente al si (if) o al
sino (else).Ahora se ve como quedara en la pantalla de la hoja de
Excel lo expuesto previamente. Se ve, enla pgina siguiente, como al
hacer clic sobre el botn, aparecera el men pidiendo un nmero, yacto
seguido se dira si ste es primo o no.21Ahora se van a definir los
dos programas necesarios para obtener un nmero determinado denmeros
primos, siguiendo el mismo esquema previamente definido. Primero se
ve como se definecon la funcin InutBox, un nuevo men en el que se
pide el nmero de nmeros primos deseado.Adems, se incluye una lnea
de cdigo para poder borrar cada vez que se haga clic sobre el
botn(para que salga un nuevo men) el listado previo de nmeros
primos.22Esta llamada mediante la funcin Call, se hace a una macro
grabada mientras se seleccionabatoda la columna A y se borraba su
contenido, como se puede ver.Aqu se puede observar el segundo
programa, llamado por el anterior, y pasndole el nmero denmeros
primos a generar (tamao de la lista) empezando por el 2.Aqu se ve
como una vez se recibe la informacin de la otra funcin, se definen
dos contadorespara controlar los dos bucles. El primero controlara
la acumulacin de nmeros primos hasta lacantidad indicada (x), y a
continuacin, al igual que antes, definiendo la variable rimo
comobooleana, se entra al segundo bucle (encargado del clculo de
los primos) suponiendo que laprimera entrada es un nmero primo (2
es primo) y que adems el nmero por el que se dividacada nmero para
comprobar que sea primo, deber ser inferior a la raz cuadrada de
dichonmero.Finalmente, con una condicin, se iran acumulando en la
columna los diferentes nmeros primosencontrados hasta llegar a la
cantidad deseada.23Aqu se ver ahora el resultado deseado.248
CONCLUSIONESUna vez presentados y explicados los ejemplos
anteriores, esperamos que sirvan de ayuda realala realizacin de los
problemas concretos de los que consta esta prctica. Tambin, y
porque no,esperamos que este pequeo manual pueda llegar a servir
como herramienta de inicio de otrosposibles futuros trabajos
encaminados en esta materia.Esperamos, de la misma forma, que la
exposicin haya sido suficientemente sencilla y clarificadorade lo
que inicialmente se pretenda y se presentaba como objetivos.259
ANEXO !S#nt#ncias : ;uncion#s LgMax Theni = i + LgMaxElse: i =
FinLigne + LgMaxEnd fDo While Mid(TxCorte, i, 1) " "i = i - 1f i =
0 Thenf FinLigne = 0 Then i = p + LgMax: Exit Doi = FinLigne +
LgMax: Exit DoEnd fLoopMid(TxCorte, i, 1) = vbCri = i + LgMaxp = i
+ 1LoopCorte = TxCorteEnd Function9('J Co.odin#s d#
*Is,u#da5$xisten comodines en $xcel para reempla(ar los caracteres
en una !squeda%El operador * puede reemplazar un grupo de
caracteres, y el comodn ? uno solo.==> La utilizacin en la
funcin bsqueda de * y de ? puede causar desrdenes importantes en
losficheros. As, si se busca por ejemplo la palabra "completndola"
y se quieren recuperar todas lasposibilidades de escritura con los
acentos o no, se utilizaran los comodines * y ? de la
siguienteforma "complet?ndola" o "complet*a"El mtodo siguiente
reemplaza el contenido de todas las celdas seleccionadas por la
palabra dereemplazamiento:- seleccionar una columna de textos-
reemplazar todas las palabras "ejemplo" por "*" ===> OK- despus,
reemplazar todos los "*" por la palabra "ejemplo" ===> borrando
todas las celdasconteniendo el * y reemplazndolo por la palabra
"ejemplo" solo == > DESASTRESe debe sealar que la forma ms rpida
para vaciar una hoja es reemplazar * par "" (se puedeprobar aunque
sin grabarlo)389('K E0tra#r #l cdi2o "ostal d# una
dir#ccin5)ongamos por e*emplo que se dispone de las siguientes
direcciones postales francesaspresentadas de la forma siguiente+SA
,-,- ./&0' 1A 2$334$,-)567 890'' A6:$3S,e qu# forma se podran
extraer los ")%Mediante un pequeo clculo matricial. Atencin, las
frmulas se deben presentar sin retorno a
lalnea...{=1*STXT(A1;EQUV(0;(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1);0);NBCAR(A1)-SUMA((ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1)))}Y
esta es la explicacin:Prembulo: Esta frmula es una frmula genrica
para extraer un, y slo un, valor numricocontenido en una cadena de
caracteres y no es especfica a la extraccin de un cdigo
postal.Objetivo del juego: con la funcin STXT, extraer de una
cadena a partir de una posicin P, unnmero N de caracteres :
=STXT(A1;P;N)La funcin STXT reenviando texto, en = 1*STXT(A1;P;N)
el 1*. sirve simplemente para transformarel resultado en numrico y
podra ser remplazado (ms largo) por =CNUM(STXT(A1;P;N)Con respecto
a la cuestin sobre el Cdigo Postal, la frmula podra resumirse en:=
1*STXT(A1;P;5)=1*STXT(A1;EQUV(0;(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1);0);5)Para
terminar (?) con el CP se podra, para extraerlo de una cadena como
la siguiente:12,Av zaza 75000 PARS ou 125 ter..etc.Hacer llevar la
extraccin sobre una parte (derecha) de la cadena y no sobre la
cadena enteraremplazando, en la frmula, A1 (cadena completa) por
=DERECHA (A1; NBCAR (A1)-5)El -5 ha sido fijado arbitrariamente: se
puede suponer, sin grandes riesgos, que todo aquelloconcerniente al
nmero de la calle, est delante del 5 carcter. Lo que podra
dar:=1*STXT(DERECHA(A1;NBCAR(A1)-5);
EQUV(0;(ESERROR(STXT(DERECHA(A1;NBCAR(A1)-5);
LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1);0);5)Volviendo a la
frmula genrica tomando como ejemplo en A1:DUPONT Marcel 75000
PARS[A] ** Obtencin de P en la frmula =1*STXT(A1;P;N)P ha sido
obtenido mediante:=EQUV
(0;(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1);0)que
reenva 15 (posicin de la 1 cifra (el 7))[A-1] ** zzz del EQUV
:=EQUV (valor buscado ; matriz de bsqueda ; tipo de bsqueda. La
matriz de bsqueda (2argumento) es obtenido
par:(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1)que
reenva una matriz de constantes
:{1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1}=EQUV(0;{1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1};0)reenva
entonces 15 ya que el 1 cero(valor buscado) en la matriz de
constantes es en 15 posicin(bsqueda exacta por el 3 argumento =
0)[A-1-1] ** zzz del (ESERROR(STXT(...[A-1-1-1] ** zzz del
LNEA(NDRECT("1:"&NBCAR(A1)))39Esto permite, en internet, de
proporcionar una tabla de constantes representando los nmeros de 1a
NBCAR(A1)Resultado
:{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25}[A-1-1-2]
** zzz del
STXT(A1;LNEA(NDRECT(.STXT(A1;{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25};1)El
STXT reenva (en forma matricial) 1 carcter (3 argumento = 1)
partiendo sucesivamente delaposicin 1, a la 2,. hasta la 25 de la
cadena A1Resultado :{"D";"U";"P";"O";"N";"T";"
";"M";"a";"r";"c";"e";"l";" ";"7";"5";"0";"0";"0";"
";"P";"A";"R";"";"S"}Estamos as
en:(ESERROR({"D";"U";"P";"O";"N";"T";" ";"M";"a";"r";"c";"e";"l";"
";"7";"5";"0";"0";"0";"";"P";"A";"R";"";"S"}*1)*1) [A-1-1-3] ** zzz
de este resultado {"D";"U";"P";"O";"N";"T";
"";"M";"a";"r";"c";"e";"l";" ";"7";"5";"0";"0";"0";"
";"P";"A";"R";"";"S"}*1Multiplicando cada elemento de la matriz por
1, los caracteres no numricos va a reenviar un valorde error
(#VALOR!) y se obtendra la
matriz:{#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;7;5;0;0;0;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!}Si
se comprueba cada elemento de la matriz con
ESERROR:ESERROR({#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;7;5;0;0;0;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!;#VALOR!})se
obtiene:{VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;FALSO;FALSO;FALSO;FALSO;FALSO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO;VERDADERO}Y
si se multiplica por 1 este resultado, la matriz se transformar en
matriz de 1 y 0 (recuerdaVERDADERO = 1 y FALSO = 0)As el resultado
utilizado como 2 argumento del
EQUV:{1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1}[B] **
Obtencin de N en la frmula =1*STXT(A1;P;N)NBCAR(A1)+1-SUMA(
(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1))); 1)*1)*1))Ver el
captulo precedente para la
parte(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1)Se
tiene entonces:N =
NBCAR(A1)-SOMME({1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1})Resultado:
=25-20La suma equivale al nmero de caracteres no numricos y as, la
diferencia entre el n total decaracteres de la cadena (NBCAR(A1)) y
la suma, dado el n de caracteres a extraer (3 argumentode la funcin
STXT)En el paso se comprende porque la frmula no es vlida si, en la
cadena, hay varios "sectores"numricos !Bonus:Mientras que el valor
numrico incluido en la cadena, pueda ser un valor decimalEj.: Zaza
ha comido 24,56 croquetasSi hay coherencia entre el separador
decimal del sistema y el presente en la cadena, es suficientecon
aadir +1 al NBCAR presente en el 3 argumento de
STXT:{=1*(STXT(A1;EQUV(0;(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1);0);NBCAR(A1)+1-SUMA((ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR(A1)));1)*1)*1))))}40Si
el separador decimal del sistema es del presente en la cadena,
utilizar SUBSTTUE y aadirtambin +1 al NBCAR presente en el 3
argumento de STXT:Para un separador decimal del sistema = el punto
y coma en la
cadena:{=1*(STXT(SUBSTTUE(A1;",";".");EQUV(0;(ESERROR(STXT(A1;LNEA(NDRECT("1:"&NBCAR
(A1)));1)*1)*1);0); NBCAR (A1)+1-SUMA ((ESERROR (STXT (A1; LNEA
(NDRECT("1:"&NBCAR(A1)));1)*1)*1))))}9('M R##."laCar un
carPct#r #n una 1aria*l#5"mo reempla(ar en una ;aria!le un punto
< coma por una coma%)or e*emplo, si en A&
ha&?>@?>0=< en el cdigo,
Ai2aria!leBrangeC=A&=D.;alue, cmo reempla(arla en Ai2aria!le
sin tocar la celdaA&%Se tiene que pasar por una macro:Sub
reemplazo()Dim MiVariable As StringMiVariable =
"fdfdfd;fdf;df"MiVariable = Replace(ZoneCach, ";", ",")MsgBox
MiVariableEnd SubAtencin esto no funciona con Excel 97. En ese caso
se debe utilizarMiVariable=Application.Substitute(MiVariable, ";",
",")9(3N R##."laCo co."l#?o cons#r1ando los N5$n una columna en
formato texto cuando se aplica la funcin reempla(ar el ;alor
siguiente EE./por nada so!re un nmero del tipo EE./'''/@/F0@/ los '
desaparecen C /@/F0@/ D. "moe;itarlo%Por defecto... y cuando la
bsqueda de "reemplazar del Excel sea demasiado inteligente ...Sub
remplt()txtSup = nputBox("Que cadena de caracteres" _ & "deseas
suprimir?")txtRemp = nputBox("Por cual desea
reemplazarla?")Application.ScreenUpdating = FalseFor Each c n
Selectionc.Value = Replace(c.Value, txtSup, txtRemp)Next cEnd SubLa
funcin Replace no est disponible para la versin Excel 97. Hay que
reemplazarla por lafuncin SubstituteSub remplt()txtSup =
Application.nputBox("Que cadena de caracteres"_& "deseas
suprimir?")txtRemp = Application.nputBox("Por cual desea
reemplazarla?")Application.ScreenUpdating = FalseFor Each c n
Selectionc.value=Application.Substitute(c.Value, txtSup,
txtRemp)'c.Value = Replace(c.Value, txtSup, txtRemp) 'No disponible
Excel 97Next c%nd Sub419(31 Es"acios ,u# no lo son5Aparecen
espacios extraos en ciertas celdas < se querra suprimirlas.Un
espacio de este tipo en una celda por una barra espaciadora, da un
chr(32). Puede venirprovocado al importar datos, que este espacio
sea un chr (160).Se puede probar lo siguiente:dim MonRange as
rangedim Mot as stringMot=chr(160)set
MonRange=Range("A1:A50")MonRange.Replace What:=mot,
Replacement:="", LookAt:=xlPart, _SearchOrder:=xlByRows,
MatchCase:=False9(3% Lista d# las l#tras d#l al;a*#to5"mo conseguir
una lista de letras del alfa!eto que se incremente
automGticamente%Aadir esta lista como macro:Sub
AnadirListaPers()Application.AddCustomList ListArray:=Array("A",
"B", "C", "D", "E", "F", "G", "H", _"", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")MsgBox
"La nueva lista es la nmero : " &
Application.CustomListCountEnd SubAs se podr incrementar una serie
manualmente en Excel, adems de lo demandado.Para poner al da la
lista circulante:Private Sub UserForm_nitialize()Dim NuListe As
ByteNuListe = 5For n = 1 To
UBound(Application.GetCustomListContents(NuListe))ComboBox1.Addtem
Application.GetCustomListContents(NuListe)(n)Next nEnd Sub9(3'
Su"ri.ir #s"acios5Aacro para suprimir los espacios que se
encuentran delante de las cifras cortadas-pegadas a partirde una
He!Sub menage()For Each cellule n
ActiveSheet.UsedRangecellule.Value = LTrim(cellule.Value)NextEnd
Sub429(33 Luitar la "ri.#ra "ala*ra d# un# ;ras#5"mo suprimir la
primera pala!ra de una frase% Cseparada del resto por un
espacioDSupongamos que A1 contiene "Bon dia companys", entonces
utilizaramos la frmula siguiente:=STXT(A1;BUSQUEDA("
";A1;1)+1;NBCAR(A1))devolvera "companys".9(38 Con1#rsin d# nI.#ros
#n l#tras5"mo con;ertir nmeros en letras% @&. en doscientos
die( < ocho...Direcciones para tele cargar los macros:Versin
auto extrable (lanza el fichero de ayuda al final de la
extraccin):http://perso.wanadoo.fr/frederic.sigonneau/office/Nb2Words.exeVersin
zipp:http://perso.wanadoo.fr/frederic.sigonneau/office/Nb2Words.zipCdigo
fuente:http://perso.wanadoo.fr/frederic.sigonneau/office/SrcWrdXl.zip9(39
E0tra#r una cad#na d# t#0to #n .#dio d# otra5Ante textos del tipo+
!la!la!la > texto a extraer cualquiera I&@0Sa!iendo que los
nicos puntos de referencia son los I < > Cnicos en el textoD
< el nmero fi*o decaracteres despu#s del
I.=STXT(A1;BUSCA(">";A1)+1;NBCAR(A1)-BUSCA(">";A1)-4)o sino,
tambin podra
funcionar:=SUSTTUYE(STXT(A1;ENCUENTRA(">";A1)+1;999);"