Professional Documents
Culture Documents
Y existe otra que se ejecuta justo antes de cerrar el libro que se llama auto_close().
Sub Auto_Open()
Dim hora As Double
Dim saludo As String
hora = (Now - Int(Now)) * 24
Select Case hora
Case 6 To 14
saludo = "Buenos días"
Case 14 To 21
saludo = "Buenas tardes"
Case Else Macros
saludo = "Buenas noches"
End Select
MsgBox saludo & " Amo"
End Sub
Equivalente a auto_open existe otra macro Workbook_Open, pero ésta ha de ser guardada no en un
módulo normal, sino en ThisWorkbook. Pruebe lo siguiente:
El siguiente procedimiento permite abrir automáticamente el libro Balance.xls al abrir el libro
Informe.xls. El procedimiento ha de estar en ThisWorkbook del libro Informe.xls.
Sub Workbook_Open()
'Apertura de libro Balance
Workbooks.Open Filename:="C:/Contabilidad/Balance.xls"
'Activación del libro Informe
Windows("Informe.xls").Activate
End Sub
7 Personal.xls
Podemos crear una macro para que este disponible en todas las hojas de cálculo. Esto se hace con el
libro PERSONAL.XLS
Personal.xls es un Libro que se carga cada vez que se inicia Excel, pero no esta visible ya que tiene el
atributo de Escondido (Hidden), por lo que si necesitamos modificarlo lo debemos hacer a través del
comando "Mostrar" del menú "Ventana". En caso que no exista lo podemos crear con un libro de
trabajo nuevo, salvarlo con este nombre y dejarlo en la carpeta "InicioXL" (XLStart), que se encuentra Personalizar
en la carpeta "Office" del directorio donde esta instalado MSOffice. Cada vez que dejamos de trabajar
con este archivo, lo debemos salvar y luego activar el comando "Ocultar" del menú "Ventana", para
que no se vea cuando iniciamos la aplicación.
www.excelavanzado.com 8/21
Personalizar
nº TRUCO TIPO
La ruta de mi fichero es:
C:\Documents and Settings\Adolfo\Datos de programa\Microsoft\Excel\XLSTART\
[PERSONAL.XLS]Hoja1
8 Saludo al arrancar
Crear un libro Personal.xls como se ha indicado anteriormente con la macro de autoarranque
siguiente:
Sub Auto_open()
Macros
MsgBox ("Que tengas un buen día")
End Sub
Esta macro creada en el libro Personal.xls hace que al iniciar Excel nos salga un mensaje
saludándonos.
9 Nombrar Hoja desde una celda
Esta macro permite asignar el nombre que pongamos en la celda A1 como nombre de la Hoja actual.
Macros
Sub NombreHoja()
ActiveSheet.Name = Range("A1").Value
End Sub
10 Protección de una hoja
Las celdas por defecto vienen bloqueadas. Si deseamos desbloquear algunas de ellas debemos hacer
lo siguiente: Formato, Celda, pestaña Proteger, quitar la casilla de verificación que esta puesta por
defecto en 'Bloqueada'. Si marcamos 'Oculta' no se verá el contenido de la celda en la barra de
fórmulas. Esto se hace cuando no se desea que alguien vea la fórmula de una celda. Después se Personalizar
debe proteger la hoja con: Herramientas, Proteger, Proteger hoja. Se le pueden permitir más o menos
acciones al usuario. Si no le permitimos seleccionar las celdas bloqueadas y desbloqueadas no podrá
posicionarse con el cursor sobre ellas. Si únicamente le dejamos seleccionar las desbloqueadas nos
encontraremos con algo parecido a un formulario.
11 Propiedad EnableSelection
Para reforzar el bloqueo del paso anterior podemos hacer lo siguiente:
Ir al Editor de Visual Basic. En el Explorador de proyectos ir a la hoja que queramos proteger. En la
Ventana de propiedades buscar la propiedad EnableSelection y ponerle el valor 1. Cerrar el editor,
volver a Excel y grabar la plantilla.
Personalizar
Con la doble opción (protección de hoja y la propiedad EnableSelection) será imposible seleccionar
una celda, y por lo tanto copiar o modificar cualquier valor. Este procedimiento no funciona en Excel
2000 y en las versiones anteriores, porque la propiedad EnableSelection no conserva el valor
modificado al cerrar la plantilla. Aunque lo cierto es que pocos usuarios conocen la citada propiedad.
12 EnableSelection = xlUnlockedCells
Para paliar el inconveniente citado anteriormente para las versiones de Excel 2000 y anteriores se
puede hacer lo siguiente:
Ir al Editor de Visual Basic. En el Explorador de proyectos ir a la hoja que queramos proteger. En la
Ventana de propiedades buscar la propiedad EnableSelection y ponerle el valor 1. Cerrar el editor,
volver a Excel y grabar la plantilla.
Con la doble opción (protección de hoja y la propiedad EnableSelection) será imposible seleccionar
una celda, y por lo tanto copiar o modificar cualquier valor. Este procedimiento no funciona en Excel Personalizar
2000 y en las versiones anteriores, porque la propiedad EnableSelection no conserva el valor
modificado al cerrar la plantilla.
Ese procedimiento se puede realizar también mediante una macro:
Private Sub Workbook_Open()
Worksheets("Hoja1").EnableSelection = xlUnlockedCells
End Sub
El valor por defecto es xlNoRestrictions
13 Opciones de Ordenación
Al ordenar un rango de datos podemos elegir en Opciones que la ordenación sea Normal (alfabética) o
Base de
según una de las Listas Personalizadas de Excel. Datos
Puede distinguir mayúsculas de minúsculas.
Puede ordenar en vertical (que es lo normal) o en horizontal.
www.excelavanzado.com 9/21
nº TRUCO TIPO
14 Criterios utilizados para filtrar una base de datos
Un criterio está formado al menos por dos celdas. La primera es un nombre de campo y la segunda
que estará debajo es el criterio propiamente dicho.
Salario
>=30.000
Cuando usamos varios criterios estos se relacionan entre si mediante concatenadores lógicos Y u O. Base de
Por ejemplo, supongamos que deseamos filtrar de una base de datos los registros correspondientes a Datos
trabajadores que cumplan que su salario esta comprendido entre 30.000 y 40.000 euros, o bien su
edad es de 30 años y se llaman Maria. En ese caso el criterio esta formado por múltiples celdas, de
forma que los criterios que estan en la misma fila se han de cumplir ambos (operador Y), y si están en
fila distinta se han de cumplir unos u otros (operador O).
Personalizar
www.excelavanzado.com 10/21
21
nº TRUCO TIPO
Personalizar
25 Proteger celdas
Con Formato, Celda, Protege, quitar la casilla de verificación en Bloqueada se consigue que en estas
celdas se pueda escribir después de ejecutar Herramientas, Proteger, Proteger hoja. Personalizar
Con TAB se puede saltar de una a otra celda de las desbloqueadas. Y con Mayúsculas + TAB se salta
hacia atrás.
26 Ocultar la formula en una celda
Con Formato, Celda, Proteger, Oculta se marcan las celdas cuyas fórmulas o contenido visto en la Personalizar
línea de edición se desee ocultar. Después se ha de proteger la hoja, con Herramientas, Proteger,
Proteger hoja.
27 Copiar una hoja
Para copiar una hoja completa dispone de dos sistemas:
El primero y más fácil es señalar con el ratón la pestaña de la hoja a copiar, pulsar Ctrl y sin soltar
arrastrar la pestaña con el ratón. Al soltar se habrá duplicado completamente la hoja. Si la hoja a
copiar se llamaba 'Hoja 1', la nueva hoja se llamará 'Hoja 1 (2)' Personalizar
Es segundo método consiste en situar el ratón en el cuadradito que queda como intersección del
indicador de filas y columnas. Esto selecciona la hoja completamente. Seguidamente se copia al
portapapeles, por ejemplo con Ctrl + C. Se inserta una hoja nueva y pulsando sobre ella en el citado
cuadradito se pega el contenido del portapapeles, por ejemplo con Ctrl + V.
28 Insertar Comentarios
Se pueden insertar comentarios en las celdas. Para ello, pulse con el botón derecho del ratón y elija
'Insertar Comentario'. Puede verlos completamente, solo la indicación de que la celta tiene un Personalizar
comentario, o no verlos en absoluto según elija una opción u otra en Herramientas, Opciones, Ver,
Comentarios.
29 Texto con diversos formatos en una misma celda
Se pueden dar distintos formatos a los caracteres o palabras de una misma celda.
Personalizar
www.excelavanzado.com 11/21
29
nº TRUCO TIPO
Por ejemplo: puede poner en una celda la siguiente expresión: Volumen (m3)
Véase el distinto color de la fuente y el 3 como superíndice. Personalizar
Volumen (m3)
Esto se consigue señalando en la barra de fórmulas el carácter o caracteres que se quieren cambiar y
aplicándoles el formato deseado.
30 Trabajar simultáneamente en varias hojas
Antes de escribir texto, formulas, dar formato, etc.. en varias hojas simultáneamente ha de señalarlas
primero.
Si son un conjunto de hojas correlativas, señale la primera haciendo clic con el ratón sobre la pestaña
que indica el nombre de la primera y haga Mayúsculas + clic en la última. Personalizar
Si las hojas no son consecutivas selecciones la primera con un clic y las restantes con un Ctrl + clic en
cada una.
Cuando haya terminado de introducir la información y formatos comunes haga clic en cualquier
pestaña y así se desactivará el modo de trabajo conjunto.
31 Escribir en varias celdas simultáneamente
Señale las celdas donde quiere escribir una misma expresión. Incluso si son de rangos separados. Personalizar
Escriba dicha expresión. Y valide su introducción con Ctrl + Intro.
32 Ver todas las fórmulas de una hoja
Se consigue pulsando Alt + º (esto es, la tecla Alt y simultáneamente la tecla de 1º que está a la
Personalizar
izquierda del número 1). Para volver a la situación anterior volver a pulsar.
También se puede conseguir mediante: Herramientas, Opciones, Ver, Fórmulas.
33 Borrar
Con el comando Edición, Borrar se puede elegir entre Todo, Formatos, Contenido (Supr) o
Comentarios.
Personalizar
Para borrar un rango primero seleccione el rango y luego presione Shift mientras arrastra con el ratón
el indicador de relleno hacia el extremo superior izquierdo del rango. Si no presiona Shift conseguirá
borrar el contenido pero no los formatos.
34 La fuente por defecto en Excel es la Arial 10 pero se puede cambiar
Se puede cambiar para todos los libros nuevos mediante: Herramientas, Opciones, General y elegir la
Fuente Estándar y el tamaño.
Pero también se puede cambiar la fuente sólo en el libro activo de la siguiente forma. Activar el libro en Personalizar
el que se quiere cambiar la fuente por defecto. Ejecute Formato, Estilo y dentro del formato de estilo
Normal elegir Modificar, Fuente y proceder a cambiar la fuente. Finalmente Aceptar.
35 Plantillas *.xlt
Las plantillas permiten predefinir formatos, estilos, textos, fórmulas, barras de herramientas
personalizadas e incluso macros, que se utilizarán en todos los nuevos libros abiertos (si la plantilla se
llama libro.xlt) u hojas nuevas insertadas (si la plantilla se llama hoja.xlt). También pueden existir otras
plantillas para diferentes usos, por ejemplo, para predefinir una factura, cierto informe mensual, un
balance, etc.
La plantilla de libro predeterminada (libro.xlt) y la plantilla de hoja predeterminada (hoja.xlt) se han de
grabar como plantilla en el directorio INICIAR que para la versión XP suele estar en: Personalizar
C:\Documents and Settings\nombreusuario\Datos de programa\Microsoft\Excel\INICIAR
o bien en:
C:\Documents and Settings\nombreusuario\Datos de programa\Microsoft\Excel\XLSTART
Tanto las plantillas que tenga en la carpeta de inicio predeterminada de Excel como las que haya
definido en la carpeta de plantillas (C:\Documents and Settings\nombreusuario\Datos de
programa\Microsoft\Plantillas) las tendrá disponibles cuando haga Archivo, Nuevo y salga el Panel de
Tareas y en el elija Plantillas Generales.
36 Puede trabajar con Estilos
En Formato, Estilo puede modificar el estilo normal o crear nuevos estilos, pero sólo estarán
disponibles en el Libro Activo.
Personalizar
www.excelavanzado.com 12/21
36
nº TRUCO TIPO
Si se desea que los estilos estén disponibles de forma permanente sigua los siguientes pasos: Abra el
libro cuyos Estilos quiere guardar permanentemente. Abra un libro nuevo y combine los Estilos en
éste. Ejecute Archivo, Guardar como, elija como tipo Plantilla (*.xlt). Escriba como nombre de fichero
Libro.xlt o Hoja.xlt y guárdelo en la carpeta de inicio de Excel (C:\Documents and
Settings\nombreusuario\Datos de programa\Microsoft\Excel\INICIAR). De esta forma cada vez que Personalizar
abra un libro u hoja nuevos se dispondrá de estos Estilos.
Puede convertir el estilo de una celda en un tipo de estilo personalizado. Sitúese en la celda patrón y
elija Formato, Estilo y cambie el nombre por uno nuevo de su elección.
Puede transferir los estilos de un libro a otro mediante Formato, Estilo, Combinar. Para ello abra los
dos ficheros (o más) y ejecute los pasos señalados desde el fichero hacia el que quiere llevar los
nuevos estilos.
37 Libros que se abren al iniciar Excel
Los libros que coloque en la carpeta de inicio de Excel:
C:\Documents and Settings\nombreusuario\Datos de programa\Microsoft\Excel\INICIAR
o bien en
Personalizar
C:\Documents and Settings\nombreusuario\Datos de programa\Microsoft\Excel\XLSTART
Se abrirán al iniciar Excel.
También puede definir una carpeta de inicio de Excel en Herramientas, Opciones, General, "Al inicio,
abrir todos los libros en:"
38 La función =CELDA
La función CELDA es la típica función que sirve para varias cosas según que argumentos se utilicen.
www.excelavanzado.com 13/21
nº
44 TRUCO TIPO
Puedes inspeccionar variables desde esta ventana anteponiendo la palabra print antes de la variable, Macros
o el signo ?.
45 Debug.Print
Esta expresión permite efectuar la depuración del programa de forma más cómoda. Se introduce en
un programa antecediendo a una variable que se desea comprobar en la ventana Inmediato. De esta
forma conseguiremos ver todos los valores que toma la variable cada vez que el programa pasa por
este comando. Se ven en la Ventana Inmediato [Ctr+G].
Ejemplo:
Sub Dos_a_la_diez()
Dim i As Integer
Dim t As Integer Macros
t=1
For i = 1 To 10
t=t*2
Debug.Print "Dos a la " & i & " = " & t
Next
MsgBox t
End Sub
Después de efectuada la depuración se quita la línea que contiene el comando Debug.Print.
46 Propiedad ListFillRange del ComboBox
Con esta propiedad deberemos definir los elementos que debe mostrar la lista, debe especificarse el
Macros
rango que contiene los elementos a mostrar, el rango debe ser una columna (o dos , o tres, etc.).
Cuidado con esta propiedad, tenga en cuenta que los elementos de la lista son tratados como datos Macros
de tipo String aunque contenga números o fechas, por lo que en estos casos, a veces será necesario
aplicar funciones de conversión de datos antes que el dato se copie en la hoja. Por ejemplo, si alguna
vez construye una lista con números verá que el dato seleccionado se alinea a la derecha, si son
fechas, no se muestra con el formato correspondiente.
48 Propiedad ListIndex del ComboBox
Mediante esta propiedad podremos saber que elemento de la lista es el seleccionado por su número
de tipo String aunque contenga números o fechas, por lo que en estos casos, a veces será necesario
aplicar 1, etc. Si no hay ningún elemento seleccionado valdrá -1. Tenga en cuenta que esta propiedad Macros
sólo está disponible en tiempo de ejecución, es decir la podremos leer mientras esté funcionando el
programa, no se puede establecer en modo diseño, observe que no aparece en la ventana
propiedades del cuadro combinado.
49 La función =TEXTO
Esta función permite convertir un valor numérico en un texto. Su función contraria es =VALOR.
Al escribir un número en una celda queda alineado a la derecha, si se escribe como texto
(anteponiéndole una comilla simple) quedará alineado a la izquierda. Ejemplo: '54
La función TEXTO tiene dos argumentos que según la ayuda son: =TEXTO(valor;formato)
valor: es el número que queremos convertir a texto Función
formato: es el formato que queremos darle. Es un argumento optativo
Pero la ayuda no se corresponde con la realidad de la función, ya que en la práctica esta función tiene
los argumentos cambiados de orden.
Pruebe =TEXTO(;"43")
Pero si prueba =TEXTO("43") obtendrá un error
50 Curiosidades de alguna funciones con valor propio
Algunos nombres de función tienen valor propio si se escriben un una celda y sin argumentos. O al
menos eso es lo que he podido comprobar en la versión XP.
Ponga en una celda cualquiera +PRECIO y al pulsar intro verá que aparece un valor. A mi me da
-1965686714.
Las funciones que he visto que tienen valor propio son las siguientes:
=PRECIO Err:508
Función
www.excelavanzado.com 14/21
nº TRUCO TIPO
=AMORTIZ.LIN Err:508 Función
=CUPON.DIAS Err:508
=DURACION Err:508
=VNA.NO.PER Err:508
=DIAS.LAB Err:508
y muchas más. Por lo que veo, son las que aparece al ampliar las funciones al instalar las
complementarias, con
Herramientas, Complementos, Herramientas para Análisis.
51 Cambiar el nombre de un Móludo
Al insertar módulos en el Editor de Visual Basic, se utilizan los nombres: Módulo 1, Módulo 2, etc.
Macros
Podemos cambiar el nombre el un módulo en sus propiedades (F4). La única propiedad de un Módulo
es 'name'.
52 Nombre de usuario: UserName
Vamos a crear una función que proporcione el nombre de usuario. Primero utilizando la Grabadora de
Macros. Haga lo siguiente. Active la Grabadora y luego seleccione Herramientas, Opciones, pestaña
General. Realice un cambio en el nombre de usuario. Cerrar la ventana de Opciones pulsando en
Aceptar. Y detener la Grabadora. La macro obtenida será la siguiente:
Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 06/08/2004 por Adolfo
'
'
With Application
.UserName = "Adolfo Aparicio" Macros
.StandardFont = "Arial"
.StandardFontSize = "10"
.DefaultFilePath = "C:\Documents and Settings\Adolfo\Mis documentos"
.EnableSound = False
.RollZoom = False
End With
End Sub
Ahora vamos a crear la función =Usuario siguiendo el procedimiento inverso.
Funcition Usuario()
Usuario = Application.UserName
End Function
Puede probarla. La encontrará en la categoría de Funciones Definidas por el usuario.
53 Extensiones de los nombres de macro
- Módulos de clase. Extensión .cls. Macros
- Formularios. Extensión .frm.
- Módulos estandar. Extensión .bas.
54 Exit Sub, Exit Function Macros
Se usan eventualmente para salir de un procedimiento o función.
55 Macro que pregunta si se desea salir de la aplicación
Sub SalirAplic()
If MsgBox("¿Quiere salir de la aplicación", vbQuestion + vbYesNo, "Ultima pregunta") = vbYes Then
Macros
Application.Quit
End If
End Sub
56 Llamada a un procedimiento
[Call] NombreProc [(lista de argumentos)]
La palabra clave Call es opcional para llamar a un procedimiento, salvo que existan argumentos, en
cuyo caso es obligatoria. Los argumentos deben ir entre paréntesis y pueden ser valores o variables.
Macros
www.excelavanzado.com 15/21
nº TRUCO TIPO
MsgBox "La suma es " & a + b
End Sub
Sub sumar() Macros
Call Suma(3, 4)
End Sub
Para llamar a un procedimiento de otro módulo
NombreDelMódulo.NombreDelProcedimiento
Ejemplo: ThisWorkbook.SalirAplic
Para llamar a un procedimiento de otro libro
Application.Run "NombreDelLibro!NombreDelMódulo.NombreDelProcedimiento"
Ejemplo: Application.Run "Informe.xls!ThisWorkbook.SalirAplic.xls"
Al ejecutar este comando, el libro Informe.xls debe estar abierto.
57 Proteger con contraseña las macros
Alt + F11
Macros
Herramientas => Propiedades de VBAProject => Protección => Bloquear proyecto para visualización
=> Contraseña
58 Convertir una función en un Complemento
Podemos hacer que una función creada por el usuario este disponible en todos los Libros. Para ello,
hemos de convertir el Libro que contiene la función en un Complemento.
Los Complementos disponibles se ven haciendo: Herramientas => Complementos.
Excel carga los complementos guardados en el directorio donde tengáis instalado MsOffice y luego en
una carpeta que varía con la versión que tengas instalada. Para XP puede ser:
C:\Documents and Settings\Adolfo\Datos de programa\Microsoft\AddIns\ Macros
Para convertir el libro que contiene nuestra Función en un Complemento, bastara ir al Menú
Archivo/Guardar como y elegir el formato Complemento de Microsoft Excel (*.xla). Si lo guardáis en el
directorio que tiene tu versión asignado estará siempre disponible.
Un aspecto a tener en cuenta es que los Complementos no son editables, es decir no podrás modificar
o añadir mas Funciones. Por eso es recomendable guardar primero el Libro en formato *.xls y luego
como *.xla.
59 Hacer referencia a un RANGO
Sintaxis para hacer referencia a un Rango:
Si el rango está en la misma Hoja:
Rango
Si está en otra Hoja del mismo Libro:
'Nombre de Hoja'!Rango
Si está en una Hoja de otro Libro, y el Libro se encuentra en la misma carpeta que el actual:
'[Nombre de Libro.xls]Nombre de Hoja'!Rango
Si está en una Hoja de otro Libro, y el Libro se encuentra en diferente carpeta que el actual: Edición
'c:\Carpeta\SubCarpeta\[Nombre de Libro.xls]Nombre de Hoja'!Rango
Si el rango está en otro ordenador conectado al nuestro por una Intranet:
'\\Servidor\Carpeta\[Nombre de Libro.xls]Nombre de Hoja'!Rango
Si el rango está en otro ordenador conectado al nuestro por Intrernet:
'http://www.servidor.com/Carpeta/[Libro.xls]Hoja'!Rango
Los apóstrofes (') son necesarios si existen espacios.
Ejemplo: Prueba a poner esto en una celda de una hoja de Excel cualquiera:
=BUSCARV(200;'http://www.fcjs.urjc.es/finan/[busquedas.xls]Hoja1'!tab1;2)
Si todo va bien, y tienes acceso a Internet verás como respuesta la letra B.
60 Para localizar la última celda de una lista
Sub Final()
While ActiveCell.Value <> "" Macros
ActiveCell.Offset(1, 0).Select
Wend
End Sub
61 Abrir un libro existente:
Sub AbrirLibro()
Workbooks.Open ("C:\Mis documentos\Ejemplo.xls")
Macros
www.excelavanzado.com 16/21
61
nº TRUCO TIPO
End Sub
Activar un libro ya abierto:
Sub ACtivarLibro() Macros
Workbooks("Ejemplo.xls").Activate
End Sub
Crear un libro nuevo:
Sub NuevoLibro()
Workbooks.Add
End Sub
62 Borrar un registro de una tabla que contenga un dato concreto
Sub BorrarFilas()
While ActiveCell.Value <> ""
If ActiveCell.Value <> "Cadiz" Then
ActiveCell.Offset(1, 0).Range("A1").Select
Macros
Else
Selection.EntireRow.Delete
End If
Wend
End Sub
63 Creación de una Fórmula personalizada
Cálculo del término amortizativo de un préstamo tipo francés (de pagos constantes). Similar a la
fórmula =PAGO pero en este caso usando tipo nominal y con fraccionamiento.
Function Termino(Principal@, Años As Byte, tipo_nominal!, fraccionamiento As Byte)
Dim im! 'Tipo efectivo del subperiodo
im = tipo_nominal / fraccionamiento / 100
Termino = Principal * im / (1 - (1 + im) ^ (-Años * fraccionamiento)) Macros
End Function
Pongamos un ejemplo para un principal de 100.000 €, 10 años, tipo nominal anual del 6%, con
fraccionamiento mensual. En este caso, al ser el fraccionamiento mensual el término obtenido es la
mensualidad.
Sub ejemplo()
End Sub
64 Macro que cierra Excel
Se puede asociar a un botón o a un icono.
Sub Auto_Close() Macros
Application.Quit
End Sub
65 Macro que elimina las barras de desplazamiento
Sub Desbarra()
With ActiveWindow
.DisplayHorizontalScrollBar = False Macros
.DisplayVerticalScrollBar = False
End With
End Sub
66 Macro que protege el libro y la hoja
Sub Blindaje()
ActiveWorkbook.Protect Password:="1234" Macros
Sheets("Hoja1").Protect Password:="1234"
End Sub
67 La función =EXTRAE y la función =ENCONTRAR
Si en B6 pones el nombre de una persona, por ejemplo: "Andrés Suarez Oliveira" la siguiente función
obtiene las tres iniciales (ASO). Función
=IZQUIERDA(B6;1)&+EXTRAE(B6;ENCONTRAR(" ";B6)+1;1)&EXTRAE(B6;+ENCONTRAR("
";B6;ENCONTRAR(" ";B6)+1)+1;1)
68 La función =RESIDUO permite calcular la parte Fraccionario
Función
www.excelavanzado.com 17/21
nº
68 TRUCO TIPO
En Excel disponemos de =ENTERO que calcula la parte entera, pero no disponemos de FRAC que
calcularia la parte fraccionaria. Para calcular la parte Fraccionaria deberíamos usar uno de estos dos
Función
métodos:
=A1-ENTERO(A1)
=RESIDUO(A1;1)
69 Macro que borra los ceros de un rango
Sub BorrarCeros()
For Each Celda In Range("C11:G24")
If Celda.Value = 0 Then Celda.ClearContents Macros
Next
End Sub
Si sólo se quieren ocultar los ceros se ha de poner formato de celda personalizado de #.###
70 Macro que reemplaza una palabra por otra
Sub RemplazarPalabra()
Dim Palabra As String
Dim Hoja As Long
Palabra = Trim(InputBox("Introduzca la palabra a buscar: "))
For Hoja = 1 To Sheets.Count
Sheets(Hoja).Activate Macros
Cells.Replace What:=Palabra, Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next Hoja
End Sub
En este caso reemplazamos por "", lo que supone borrar la palabra buscada.
71 Calculo del NIF
Esta función calcula el NIF (Número de Identificación Fiscal) utilizado en España.
Function nif(dni As Long) As String Macros
nif = Mid("TRWAGMYFPDXBNJZSQVHLCKE", (dni Mod 23) + 1, 1)
End Function
72 Función que calcula la fila que ocupa cierto valor en una tabla
Está pensado para que la matriz se ponga comenzando en la celda A1, sin encabezado y sin que se
repitan los elementos.
Function DimeFila(Rango As Range, Valor_a_buscar) As Integer
For Each c In Rango Macros
If c.Value = Valor_a_buscar Then
DimeFila = c.Row
End If
Next
End Function
73 Para poner el nombre del fichero en una celda
=EXTRAE(CELDA("NOMBREARCHIVO";A1);ENCONTRAR("[";
CELDA("NOMBREARCHIVO";A1))+1;+(ENCONTRAR("]"; Función
CELDA("NOMBREARCHIVO";A1)))-ENCONTRAR("[";
CELDA("NOMBREARCHIVO";A1))-1)
Requiere grabar el fichero. Las 4 líneas anteriores son una misma fórmula.
74 Para poner el nombre de la hoja en una celda
=EXTRAE(CELDA("nombrearchivo");ENCONTRAR("]";CELDA("nombrearchivo"))+1;255) Función
Requiere grabar el fichero.
75 Función que muestra la fórmula de una celda
Devuelve la fórmula que contiene una celda en lenguaje local
Function DisplayCellFormula(InputCell As Range) As String Macros
DisplayCellFormula = InputCell.FormulaLocal
End Function
Si se quita la palabra 'Local' devuelve la fórmula en inglés.
76 Determinación de si un número es primo o no es primo
www.excelavanzado.com 18/21
nº
76 TRUCO TIPO
Sub primo()
Dim primo As Boolean
Dim n As Long
Dim d As Long
n = Val(InputBox("Introduce un número natural", "Entrada de Datos"))
d=2
primo = True
Do While primo And d < n
If n Mod d = 0 Then
Macros
primo = False
End If
d=d+1
Loop
If primo Then
MsgBox (n & " es primo")
Else
MsgBox (n & " no es primo")
End If
End Sub
77 Activar o Desactivar el empleo de la función IMPORTARDATOSDINAMICOS
Al intentar operar con formulas que hacen referencia a celdas que provienen de una tabla dinámica
con la versión XP de Excel nos encontramos con que automáticamente nos pone la función:
Ahora, todo lo que tendremos que hacer es pinchar este botón para activar / desactivar la función
IMPORTARDATOSDINAMICOS, que viene activada por defecto.
78 Factorial
Function facto(n)
Dim i As Integer
facto = 1
i=0 Macros
Do
i=i+1
facto = facto * i
Loop While i <> n
End Function
79 Inicializar una matriz
Se inicializa con ERASE
'En este caso se ponen todos los valores a Empty
Sub test()
Dim c(1 To 20, 1 To 10) As Variant
For i = 1 To 20
For j = 1 To 10
c(i, j) = RND
Macros
www.excelavanzado.com 19/21
nº TRUCO TIPO
Next j
Next i
MsgBox c(1,1)
Erase c
MsgBox c(1,1) Macros
End Sub
'En este caso se pone la variable c a su estado inicial
'Borrandose los valores, las dimensiones y recuperandose
'la memoria usada.
Sub test1()
Dim c As Variant
c = ActiveSheet.Range("A1:J20").Value
MsgBox c(1, 1)
Erase c
'Esto dara error ya que no hay ninguna matriz
MsgBox c(1, 1)
End Sub
80 Evitar los movimientos de pantalla mientras se ejecuta una macro
Para evitar que durante la ejecución de una macro se vean todos los movimientos y cambios del
cursor, para evitar las "chirivitas" que se ven al ejecutar una macro:
Al principio de la macro escribe Macros
Application.ScreenUpdating = False
y al final
Application.ScreenUpdating = True
81 Formula referida siempre a un mismo rango
=SUMA(INDIRECTO("A1:B2")) Función
Esta expresión permite sumar siempre el rango indicado aunque dicho rango se mueva a otra zona de
la hoja.
82 While...Wend
Esta estructura permite ejecutar las instrucciones contenidas mientras la condición sea verdadera.
www.excelavanzado.com 20/21
nº TRUCO TIPO
85 Ocultar Hojas
Podemos ocultar o mostrar Hojas de un libro. En el ejemplo siguiente, la Hoja2 esta inicialmente
oculta, y para poder trabajar con ella la macro la mustra, y al finalizar la vuelve a ocultar.
Sub oculta()
Macros
Sheets("Hoja2").Visible = True
ActiveWorkbook.Sheets("Hoja2").Activate
'... ...
Sheets("Hoja2").Visible = False
End Sub
86 Determinar la fila hasta la que llega un rango
Podemos determinar facilmente la fila hasta la que llega un rango. Supongamos el rango B5:B100, del
que sabemos en que fila acaba (la 100), pero no sabemos en que fila comienza. Ejecutando la macro
la variable n tomará el valor 5, que es la fila de comienzo del rango. Macros
Dim n As Long
Range("B100").End(xlUp).Select
n = Selection.Row
www.excelavanzado.com
www.excelavanzado.com 21/21