Excel 97
Excel 97
Excel 97
Hoy en día, Microsoft Excel domina el mercado de las hojas de cálculo, obteniendo una
cuota de mercado alrededor de 90% (o algo así).
No obstante, hay competidores como el OpenOffice, cuales empiezan (poco a poco) a ganar cierta
popularidad.
Lo más último son las hojas on-line como 'Google Spreadsheets', introducidas en junio del 2.006.
La primera version de Excel fue introducida en 1.985, aunque no fue la primera hoja de cálculo.
Según varios artículos, la primera hoja de cálculo se llamaba VisiCalc, introduciendo filas y
columnas.
Lotus 1-2-3...
La competencia principal iba a ser Lotus 1-2-3, el cual creció hasta convertirse en líder del
mercado. No obstante, Excel ganó la carrera, y hoy se títula como no. 1 con clara mayoría de
cuota de mercado.
Excel 95
Durante las sigiuente década, nuevas versiones de Excel salieron a la luz, incorporando más y más
funciones. El próximo gran salto fue Excel 95, entregado en el año 1.995. Este fue la primera
versión de 32 bits, y realmente fue la que marcó el paso para el Excel actual.
Excel 97
Excel 97 dio todavía más poder a programación, y ésta es muchas veces combinada con Windows
NT.
Excel 2000
Excel 2000 salió en el año 1.999, todavía más orientada hacía la web, y definitivamente
tenía una apareciencia más moderna que la del 97.
Excel 2002...
Excel 2002 se introdujo en el año 2.001, y forma parte de la "familia XP".
Excel 2003
Es la versión más reciente. Para la mayoría de nosotros, Excel 2000 es más que suficiente - lo que
se ha ido añadiendo a partir de Excel 2000 es en mayoría funciones de ayuda. Claro, aparte de la
introducción a XML, que es algo muy importante.
Excel 2007
Sólo existe en versión beta. Parece que tendrá un aspecto diferente, es decir un sistema nuevo de
los menús. Sin embargo, la verdad es que Excel lleva ya 10 años sin cambios ni novedades
significativos.
Un ejemplo de cómo utilizar esta numeración es el objeto Application. Este objeto tiene una
propiedad 'Version', que devuelve la versión Excel de la máquina. Para mas propiedades del
Application, ver Objecto 'Application' de VBA.
Sub Devolver_VersionExcel()
intVersionExcel = Application.Version
Msgbox intVersionExcel
End sub
End sub
o todavía más fácil:
Msgbox Application.ActivePrinter
End sub
Crear lista extensa de información sobre la máquina del usuario
Abajo te presentamos una macro para presentar varios datos del usuario/maquina.
Sub Application_Data()
'dimensiones
Dim strDataArray(10) As String
Dim i, x As Integer
End Sub
'-----------------------------------------------------
Sub SuprimirDatosEnceldas()
End Sub
Los elementos de Excel
En este apartado explicamos un poco los elementos de Excel - hay mucho más de lo que vamos a
contar aquí.
Libro
El propio archivo .XLS, ej. 'Factura.xls'. Es el contenedor de todas las
hojas de un libro, tanto de los módulos de VBA. También hay otros
formatos de libros de Excel, como el .XLA (add-ins). Unos ejemplos
de formatos son
Nombre Sufijo
Excel Workbook .xls
Excel Add-in (complemento) .xla
Template (Excel 97-2000) .xlt
Workspace (Excel 97-2000) .xlw
Excel version 4.0 workbook .xlw
Para ver más: support.microsoft.com/ VBA editor
Hoja de cálculo
El libro contiene 1 o más hojas (máximo 256). Por defecto, Excel te
da 16 hojas al abrir un libro nuevo. No obstante, podrás cambiar este
número en Herramientas - Opciones. Además, la hoja puede
presentar filas/columnas de dos maneras- A1 o R1C1 (Herramientas -
Opciones - General).
Estilo Qué significa Ejemplo
A1 Columnas se expresan por letras. A4, A$4:B$8
Filas se expresan por números.
R1C1 Columnas se expresan por números. R4C1, R[4]C1, R4C1
Filas se expresan por números.
Columnas
Cada hoja contiene 256 columnas, una cifra no variable.
Filas
Cada hoja contiene 65.536 filas, y no se puede alterar este número. ¿Y qué pasa si suprimimos
unas 10 filas? Pues, Excel nos añadirá 10 nuevas al final de la columna.
Celdas
Las intersecciones entre columnas y filas son las celdas. 256 col. x 65.536 líneas te dan
16.777.216 celdas en cada hoja. Es decir suficiente.
Contenido de celdas
Una celda puede contener 3 tipos de datos.
texto
números (valores)
Formato de celda
Aparte del contenido, la celda también guarda un formato. El formato dice, por ejemplo, que el
valor de la celda se va a poner en negrita y cursiva. La distinción entre valor y formato es muy
importante de entender.
Contenido = Green (texto)
etcetera
Formatos en Excel
El formato de una celda Excel se refiere del aspecto de ella, y de como presetará la celda su
contenido. Estamos hablando de formatos de números, bordes, color de fondo etc.
Para dar formato a las celdas de un libro Excel hay que definir el formato en el cuadro de diálogo
Formato. El atajo para abrir este diálogo es CTRL + 1.
Abajo encontrarás enlaces a nuestras páginas sobre celdas Excel y formatos. Recuerda que es
muy importante formatear las celdas correctamente, sobre todo si se trata de un libro Excel que
vamos a distribuir a otras personas.
Por regla general, no se deben aplicar muchos formatos. Demasiado color/fuentes etc puede hacer
que tú hoja de cálculo sea difícil de leer y entender.
El diálogo 'Formatos' se abre pulsando Ctrl+1 o desde el menú contextual (click derecho en
celda, 'Formatear celdas'.
Números
Aquí decides la presentación de números (valores). Intenta encontrar formatos que sean "fáciles"
y eficaces. Un formato extendido en contabilidad es:
En vez de presentar un dinero así: 125050000,7 debes aplicar un formato como: 125 050
000,69
Como puedes ver en el primer ejemplo, la celda contiene un valor que termina en ,69. Luego el
formato dice cuántos decimales se van a mostrar.
Code Precio
AAA 28,48
ABA 298,55
Fuente
Usa fuentes que son fáciles de leer, tanto de números como de texto. No se debe mezclar
demasiadas fuentes en la misma hoja.
Bordes
Los bordes son muy útiles - sirven por ejemplo para distinguir títulos de los datos, o el saldo de
una columnas de datos. La manera más rápida de quitar todos los bordes: Seleccionar area.
Presiona CTRL + SHIFT + -.
Fondos
Según muchos, se debe tener un poco de cuidado al aplicar fondos - puede hacer que los datos
sean de díficil lectura. Si aplicas colores, un truco es utilizar colores claros, si no los datos son
díficiles de leer. Recuerda que los fondos oscuros son difíciles de imprimir.
Desafortunadamente, los colores que Excel pone por defecto son muy fuertes. Los podrás cambiar
de un libro determinado, en Herramientas - Opciones - Color. Lamentablemente, este cambio no
se guarda para tú proximo libro de Excel. Una solución es crear una macro personal.
Proteger
Esta propiedad de la celda determina si esta celda se incluirá si se activa la protección de la hoja.
Para activar la protección: Herramientas - Protección.... No utilices esta función si no fuera
realmente necesario - un libro protegido puede causar problemas.
B3= IF(C3<>"";COUNTA($C$3:C3)&".";"")
B4= IF(C4<>"";COUNTA($C$3:C4)&".";"")
Luego se copia la fórmula hacia abajo.
Atajos
El uso de los atajos de teclado aumentará tu productividad, todo usuario avanzado de Excel lo
puede garantizar. Los atajos te pueden ahorrar bastante tiempo. Es buena idea aprender de
memoria los atajos más útiles, como por ejemplo CTRL + C para copiar las celdas Excel
seleccionadas.
Ctrl + C: Copiar
Ctrl + V: Pegar
Ctrl + X: Cortar
Cerrar libro/windows
Cerrar libro activo CTRL + w
Cerrar aplicación Excel MAYUS + w
Abrir libros/hojas
Menú Abrir CTRL + o (letra)
Abrir libro nuevo CTRL + N
Añadir hoja nueva MAYUS + F11
Guardar libros
Menú Guardar F12
Abrir libro nuevo CTRL + N
Guardar CTRL + s
Atajos para data input
Atajos para introducción de datos
Edición
Editar celda F2
Cancelar Esc
Moverse al principio de la fila Ctrl + Intro
Completar el editar celda, moverse una celda para Tab
abajo
Completar el editar celda, quedarse en la misma celda Flechas
Moverse un carácter Inicio
Moverse a principio de la línea. Fin
Seleccionar bloques de texto/números en una línea. Ctrl + Mayus + Flecha
Empezar nueva línea en la misma celda Alt + Intro
Introducir texto
Introducir texto, sea cual sea el formato de la '
celda
Repetición de instrucciones
Repetir la última instrucción Ctrl + Y
Repetir la última instrucción F4
Deshacer la última instrucción Ctrl +
Z
Nombrar rangos
Definir nombre a rango Ctrl + F3
Rellenar columnas/filas
Rellenar hacia abajo Ctrl + J
Rellenar hacia derecha Ctrl + D
Atajos para formatos
Atajos para trabajar más eficaz y rápido al dar formato a las celdas y
hojas de Excel
Formatos (estandar)
Formato moneda CTRL + MAYUS + $
Formato porcentaje CTRL + MAYUS + %
Formato fecha CTRL + MAYUS + #
Formato número (2 dec., sep. de mil) CTRL + MAYUS + !
Bordes
Aplicar bordes CTRL + MAYUS + &
Suprimir bordes CTRL + MAYUS + _
Formatos de texto
Negrita CTRL + N
Cursiva CTRL + K
Subrayado CTRL + S
Introducir texto sea cual sea el formato de la celda '
Tamaño de fuente CTRL + MAYUS + P
Ocultar filas/columnas
Ocultar fila CTRL + 9
Mostrar fila CTRL + MAYUS + 9
Ocultar columna CTRL + 0 (cero)
Mostrar columna CTRL + 0
Añadir/suprimir filas
Añadir fila MAYUS + Barra, CTRL + +
Suprimir fila MAYUS + Barra, CTRL + -
Añadir/suprimir columnas
Añadir columna CTRL + Barra, CTRL + +
Suprimir columna CTRL + Barra, CTRL + -
Atajos para el editor VBA
Atajos para trabajar más eficaz con el editor VBA de Excel.
Abrir/cerrar editor VBA
Abrir editor VBA Alt + F11
Volver a Excel Alt + F11
Cerrar editor VBA Alt + F4
Dentro del editor VBA
Examinador de objetos F2
Buscar F3
Ventana propiedades F4
Cerrar ventana CTRL + F4
Ejecutar F5
Ver código del proyecto F7
Paso a paso por instrucciones F8
Ejecutar hasta el cursor CTRL + F8
Insertar punto de interrupción F9
Suprimir punto de interrupción F9
Suprimir todos los puntos de interrupción CTRL + MAYUS + F9
Tipos de referencias
Las referencias es una identificación a una celda (o a un rango de celdas). Esta identificación es
necesaria para fórmulas y para operaciones del VBA (Visual Basic for Applications, macros etc).
Referencia externa
Igual que las referencias internas, pero identifica celdas de otro libro.
Referencia remota
También se puede crear referencias a otros programas, por ejemplo a traves del protocolo DDE
(Dynamic Data Exchange).
Estilos de referencias
Hay dos estilos de referencia: 'A1' y 'R1C1'. Excel te da el estilo 'A1'
por defecto.
A1 » Rotula las columnas con letras. » A4
Rotula las filas con números.
R1C1 » Rotula las columnas con números. » R4C1
Rotula las filas con números.
El estilo A1 es el mejor para fórmulas en la hoja Excel. Es más fácil de leer que el R1C1. Este
segundo es muy útil a la hora de programar en VBA de Excel.
Este cambio también puede realizarse desde VBA de Excel. Un truco es preparar un macro para
cambiar entre A1 y R1C1. Esto puede agilizar la programación bastante.
Sub CambiarEstilo
If Application.ReferenceStyle = xlR1C1 Then
Application.ReferenceStyle = xlA1
Else
Application.ReferenceStyle = xlR1C1
End If
End sub
Estilos de referencias
Hay dos estilos de referencia: 'A1' y 'R1C1'. Excel te da el estilo 'A1'
por defecto.
A1 » Rotula las columnas con letras. » A4
Rotula las filas con números.
R1C1 » Rotula las columnas con números. » R4C1
Rotula las filas con números.
El estilo A1 es el mejor para fórmulas en la hoja Excel. Es más fácil de leer que el R1C1. Este
segundo es muy útil a la hora de programar en VBA de Excel.
Este cambio también puede realizarse desde VBA de Excel. Un truco es preparar un macro para
cambiar entre A1 y R1C1. Esto puede agilizar la programación bastante.
Sub CambiarEstilo
If Application.ReferenceStyle = xlR1C1 Then
Application.ReferenceStyle = xlA1
Else
Application.ReferenceStyle = xlR1C1
End If
End sub
Referencias relativas y absolutas
Una referencia tiene una propiedad que define su comportamiento.
Referencia relativa
Referencia relativa son referencias que, al copiar la celda que contiene la referencia, desplaza su
referencia tanto como la distancia entre la celda copiada y la celda donde se pega.
Ejemplo: = B2
Referencia absoluta
Una referencia absoluta no deplaza su referencia en absoluto.
Ejemplo: = $B$2.
Los $ los puedes introducir tecleando, pero es más fácil utilizar F4 al editar la fórmula.
Para enclavar sobre la fila 2: =B$2. Esto es más fácil probarlo en directo, copiando rangos,
enclavando filas y columnas.
Fórmulas Excel
Las fórmulas, junto con las funciones, son una parte fundamental de
una hoja de cálculo. Sirven para resolver todo tipo de cálculo, desde
sencillas fórmulas aritméticas hasta calcular grandes rangos de datos
estadísticos para informes económicos.
Enlace Descripción
Operadores Los operadores especifca que tipo de cálculos la fórmula va a
ejercer.
Ejemplos Casos prácticos cómo utilizar las fórmulas de Excel.
Gráficos Casos prácticos de los gráficos en Excel.
Operadores aritméticos
Sirven para hacer operaciones matemáticas básicas. El resultado es
un valor numérico.
Operador Nombre Función Ejemplo
+ Plus Adición (A1:B1)
- Minus Subtracción (A1:B1, E2:F8)
* Asterisco Multiplicación (A1:B1)
/ Barra División (A1:B1, E2:F8)
% Porciento Porcentaje (A1:B1)
^ Caret Exponente (A1:B1, E2:F8)
Operadores comparador
Sirven para comparar elementos de la fórmula.
Operador Nombre Ejemplo
= Igual a A1 = B1
> Mayor que A1 > B1
>= Mayor que o igual a A1>= B1
< Menor que A1 < B1
<= Menor que o igual a A1 <= B1
<> No igual a A1 <> B1
Operadores para concatenar texto
Sirven para concatenar (juntar) varias cadenas de texto de celdas
Excel. El resultado es una cadena única de texto.
Operador Nombre Función Ejemplo
& Ampersand Concatenar texto "excel"&"ismo" = excelismo
Operadores referencia de rangos
`
TEXTO(A1; _formato)
En el ejemplo abajo vamos a utilizar los valores de las celdas D5 y D6. Estos valores tienen los
formatos de dos decimales y separador de miles. Este formato se expresa con # ###,00.
Ahora, no es difícil aplicar un formato para que la fecha muestre solo el mes. Pero para hacer
cálculos (por ejemplo sumar por mes), el FORMATO no da. Lo que nos interesa es el VALOR. Por
eso vamos a añadir una columna nueva que nos da la fecha 1 del mes correspondiente. Con esta
columna podemos luego proceder a sumar por condicion (MES).
La fórmula
Tenemos la fecha de 30-01-2004 en la celda A1, y queremos una fórmula que nos devuelva 01-
01-2004. La fórmula sería:
= FECHA(AÑO(A1);MES(A1);1)
Ejemplo
E5:E8: Aquí sacamos el valor del primer día del mes.
Fórmula Excel cual nos permite ver como hallar el tiempo transcurrido entre dos fechas.
Fórmula Excel cual nos permite ver como hallar el tiempo transcurrido entre dos fechas.
Fórmulas CONTAR.SI / SUMAPRODUCTO
En este capítulo explicamos como contar celdas que cumplan con una o más condiciones.
=CONTAR.SI(A1:A5;120)
=CONTAR.SI(A1:A5;"Mojo")
=CONTAR.SI(A1:A5;"="&C1)
=SUMAPRODUCTO((A1:A5>6)*(A1:A5>9))
=SUMAPRODUCTO((A1:A5>C1)*(A1:A5>9))
Utilizamos la funcionalidad del formato condicional de Excel para resaltar registros que contengan
la fecha seleccionada en un cuadro combinado.
Un interesante ejemplo de como combinar un gráfico con los controles de la hoja Excel. El ejemplo
no utiliza VBA.
Las cartas Gantt (Henry L. Gantt, 1861-1919) son casi imprescindibles en la dirección de
proyectos, tanto para poder ver el tiempo dedicado a las actividades del proyecto, como la
dependencia entre ellas.
Enlace Contenido
Qué es VBA Breve introducción a VBA.
VBA editor Introducción al editor VBA de Excel.
Macros Aprende a grabar macros.
Variables Tipos/declaraciones de variables de VBA.
Bucles Ejemplos de los bucles repetitivos de VBA.
Ejemplos de código Trozos de código VBA para utilizar.
¿Qué es VBA?
VBA significa Visual Basic for Applications. Es un lenguage de programación que surge de
Visual Basic (VB). Se podría decir que es un dialecto de VB. VBA de Excel está adaptado a Excel,
para trabajar con celdas, hojas, autofiltro etc (es decir, los objetos de la aplicación Excel).
Con este lenguage de programación puedes crear tus propios programas en Excel.
Estos programas pueden ser todo desde una macro (una pequeña programa VBA, por ejemplo un
atajo personalizado) hasta una aplicación entera con listas desplegables, menús etcetera.
¿Porqué VBA?
VBA sirve para muchas cosas. Imagínate todas las tareas repetitivas que tienes que ejecutar todos
los días. Un ejemplo - siempre vas aplicando el mismo formato a un grupo de celdas de un libro
que te mandan todos los días. En vez de hacer un monton de clicks para obtener este formato,
puedes automatizar el proceso, a un boton, o un atajo de teclado.
También puedes crear aplicaciones que importan datos desde el libro mayor, reorganizan los
datos, y crean informes personalizados para cada departamento. Casi no hay límites.
VBA de Excel te permite interactuar no solo con otros libros Excel, sino con todos los programas
Office, como Access, Word etc (menos InfoPath que forma parte del Office 2003).
Origen de VBA
Es de Microsoft, y surge de BASIC (Beginner´s All-purpose Symbolic Instruction Code, o Código de
Instrucciones Simbólicas de Uso General para Principiantes), el cual en su turno es un lenguage
que tiene muchos años ya (desde los años sesenta).
¿Existen varios VBAs?
VBA existe para todas las aplicaciones de Microsoft Office, y estas se llaman 'host aplicacions'. Así
que hay VBA para Excel, otro para Word etc. Cada VBA se parece al resto, pero también tienen
diferencias, por servir distintos 'host aplications'. Excel utiliza, por supuesto, VBA para Excel.
Contenido de un proyecto
En la columna de izquierda tenemos las piezas que forman parte del proyecto. En este ejemplo
tenemos dos libros abiertos:
Cuando ese programa crezca, podrá empezar a llamarse programa. Pero si hablamos de un
programita que sirve para ejecutar sencillas, repetitivas tareas, debemos llamarlo macro.
El nombre macro vendrá de 'macro-instrucciones' que así se llamaban antes. Supongo que se
refierirían a 'instrucciones que iban más allá de los menus'.
¿Para que sirven las macros?
Para cualquier trabajo realizado en Excel, prácticamente. Puedes automatizar procesos,
importaciones de Access, dar un formato predefinido (por ti) a las celdas seleccionadas, atajo para
mandar el último Pivot de Excel a Outlook...
Preparar la grabación
Entra Herramientas - Macro - Grabar nueva macro.
Presiona OK. Ahora la macro grabará todo lo que pase a tu libro de Excel. Si seleccionas celda H1,
esa misma acción se grabará. Después, al ejecutar la macro, esa celda se selecionará
(¡sorpresa...!). Entonces, mientras grabas, seleciona celda H1, cambia el formato a Número - 2
decimales. Paramos la grabación.
Al cambiar el código un poco podremos hacer que VBA cambie el formato a cualquier celda que
tengas seleccionada. Limpia el código para que quede el siguiente marcado.
Selection.NumberFormat = "0.00"
Ejecutar la macro
Ahora, vuelve a la hoja, y prueba tú nueva macro. Selecciona un rango de celdas, aplica el atajo
(CTRL+L). También puedes ejecutar la macro desde Herramientas - Macro - Macros.
Macros personales
¿Qué son las macros personales?
Son macros que están accesibles desde cualquier libro Excel. Estas macros se guardan en un libro
especial llamado Personal.xls (Libro de Macros Personales).
Al abrir Excel, este libro se cargará, ocultamente. De este modo, las macros que grabes allí
siempre estarán accesibles. Ideal para tus propios atajos, cómo por ejemplo Separador de miles,
Pegar valor etc.
1. Por tu cuenta:
Crea un libro nuevo, guardalo en la carpeta InicioXL indicado arriba, vuelves a Excel para luego
ocultarlo (Ventana - Ocultar). Luego, para colocar macros dentro de tu nuevo libro, puedes
introducirlas manualmente (editor VBA) o grabar una macro nuevo y guardarla dentro del Libro de
Macros personales. Para grabar una macro ver Grabar una macro.
Al grabar una macro indicas donde guardarla. Si eliges Libro de macros personales, Excel creará el
libro Personal.xls en la carpeta InicioXL. Para grabar una macro ver Grabar una macro.
Para ayuda sobre como se graban las macros, ver Grabar una macro.
Alineación izquierda/derecha
Sub Ajustar_izq_der()
If Selection.HorizontalAlignment = xlRight Then
Selection.HorizontalAlignment = xlLeft
Else
Selection.HorizontalAlignment = xlRight
End If
End Sub
Convertir pesetas a euro
Sub Convertir()
Set Area = Selection
For Each Cell In Area
z = Round(Cell / 166.386, 2)
Cell.Value = z
Cell.NumberFormat = "#,##0.00"
Next Cell
End Sub
Pegar formato
Sub PegarFormato()
Selection.PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
End Sub
Pegar valor
Sub PegarValor()
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub
Dos decimales
Sub DosDec()
Dim Area As Range
Set Area = Selection
For Each Cell In Area
z = Round(Cell, 2)
Cell.Value = z
Cell.NumberFormat = "#,##0.00"
Next Cell
End Sub
Separador de miles
Sub SeparadorMil()
Dim Area As Range
Set Area = Selection
Sub SuprimirFilasVacias()
LastRow = ActiveSheet.UsedRange.Row - 1 + _
ActiveSheet.UsedRange.Rows.Count
For r = LastRow To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then
Rows(r).Delete
End If
Next r
End Sub
Autofilter
Sub FilterExcel()
Selection.AutoFilter
End Sub
Grids
Sub Grids()
If ActiveWindow.DisplayGridlines = True Then
ActiveWindow.DisplayGridlines = False
Else
ActiveWindow.DisplayGridlines = True
End If
End Sub
Cambiar A1 a RC (columnas tiene números en vez de letras)
Sub Rc()
If Application.ReferenceStyle = xlR1C1 Then
Application.ReferenceStyle = xlA1
Else
Application.ReferenceStyle = xlR1C1
End If
End Sub
Modificar paleta de colores
Sub Paleta()
ActiveWindow.Zoom = 75
ActiveWorkbook.Colors(44) = RGB(236, 235, 194)
ActiveWorkbook.Colors(40) = RGB(234, 234, 234)
ActiveWorkbook.Colors(44) = RGB(236, 235, 194)
End Sub
Mostrar todas las hojas
Sub MostrarHojas()
Set wsHoja = Worksheets
For Each wsHoja In ActiveWorkbook.Worksheets
If wsHoja.Visible = False Then
wsHoja.Visible = True
End If
Next wsHoja
End Sub
Preparar la grabación
Entra Herramientas - Macro - Grabar nueva macro.
Nombre de Pon un nombre descriptivo, por ejemplo DosDecimales. Si quieres espacio
la macro entre palabras, pon Dos_Decimales.
Método abreviado Si quieres que la macro se active desde el teclado, pon la combinación,
(atajo) por ejemplo CTRL + L. Presionando MAYUSCULA te darán todavía más
combinaciones.
Guardar macro en O se guarda en Este Libro, o en Libro de Macros Personales. Si eliges
Libro de Macros Personales, la macro va a estar disponible desde
cualquier libro de Excel.
Descripción Si quieres puedes poner un texto explicativo el cual se incluirá en el
código de la macro.
Presiona OK. Ahora la macro grabará todo lo que pase a tu libro de Excel. Si seleccionas celda H1,
esa misma acción se grabará. Después, al ejecutar la macro, esa celda se selecionará
(¡sorpresa...!). Entonces, mientras grabas, seleciona celda H1, cambia el formato a Número - 2
decimales. Paramos la grabación.
Entra Módulos - Módulo 1. A la derecha se ve lo que VBA te ha grabado. El código hace que Excel
selecione celda H1, y que luego aplique un formato de número de dos decimales. Es decir, la
macro solo actuará sobre la celda H1.
Al cambiar el código un poco podremos hacer que VBA cambie el formato a cualquier celda que
tengas seleccionada. Limpia el código para que quede el siguiente marcado.
Selection.NumberFormat = "0.00"
Ejecutar la macro
Ahora, vuelve a la hoja, y prueba tú nueva macro. Selecciona un rango de celdas, aplica el atajo
(CTRL+L). También puedes ejecutar la macro desde Herramientas - Macro - Macros.
VBA Variables
Enlace Descripción
Tipos de variables Referencia de variables
Declarar variables La importancia de declarar las
variables.
Tipos de variables
Abajo presentamos los más frecuentes tipos de variable de VBA.
Tipo Bytes Descripción Comentario
Byte 1 0-255 Integrales positivos
Boolean 1 True/False Valores discretos
Integer 2 -32.768 hasta + ... Integrales
Long (long int.) 4 -2.147.483.648 hasta + ... Integrales
Single 4 -3,402823 E38 hasta + ... Decimales
Double 8 -1,79769313486232 E308 hasta + ... Decimales
Currency 8 15 díg. + 4 decimales Número, 4 dec.
Date 8 1-ene-100 hasta 31-dic-9999 Fechas
Object 4 referencia a objetos Ej. "Workbook"
String 10+ carácteres Ascii (texto) Texto
String (long. fija) 1+ carácteres Ascii, longitud predef. Texto
Variant 16+ cualquier tipo de datos Cubre la mayoría
Declarar variables
¿Porqué declarar variables?
Te ayudará a programar
VBA te ayuda a elegir propiedades/métodos que corresponden a esa variable.
Declarar variables
Una variable se declara empleando el comando DIM. DIM significa Dimension, y viene del antiguo
BASIC. Al declarar, puedes indicar el número de dimensiones que la variable va a tener (ej.
guardar números dentro de una variable, en 3 dimensiones).
Para que sea más fácil leer el código, pon un indicador en el nombre de la variable. Así basta con
leer el nombre de la variable para saber de que tipo es. Puede ser str para String, int para Integer
etc.
Una alternativa al DIM es Public. La variable será accesible desde todas partes de tú proyecto VBA.
El nombre puede tener hasta 254 carácteres (por supuesto demasiado...). No puede empezar con
una cifra. Algunos nombres son reservados para VBA/Excel, la cual te notificará al ejecutar.
Enlace
Do while... Loop
Do until... Loop
While... Wend
For i... Next
For each... Next
Para qué sirven los bucles
Los bucles sirven para repetir instrucciones varias veces. A lo mejor tienes una columna en Excel
con 25.000 nombres, y quieres sacar las personas cuyos apellidos empieza con "Lo". En este caso
se puede emplear un bucle que evalua todos estos nombres según el criterio "Lo", uno por uno.
Do while... Loop
Repite las instrucciones mientras una condición es TRUE/VERDADERO.
Do until... Loop
Repite las instrucciones hasta que una condición se convierta en TRUE/VERDADERO.
While... Wend
Igual al bucle Do while... Loop.
Do While... Loop
Instrucción que repite las instrucciones mientras una condición es TRUE/VERDADERO.
Ejemplo
Excel tiene valores en las celdas B1:B100. Quieres buscar la primera celda que tenga un valor más
alto/igual que 1,50.
i=1
columna 2. Es decir celda B1. Al final del bucle, i nos dará la línea que buscamos.
Do While Cells(i, 2) <> "" significa que queremos que un bucle siga hasta que no hayan más
celdas con valores en esta columna.
Aplicamos la condición a cada celda, para luego salir del bucle (Exit Do) si encuentra un valor igual
a ó más alto que 1,50 (VBA utiliza punto en vez de coma para decimales).
Do until... Loop
Instrucción que repite las instrucciones hasta que una condición se convierta en
TRUE/VERDADERO.
Ejemplo
Una hoja Excel tiene datos (en este caso nombres) en las celdas
A1:A5. Queremos que el bucle pare en "Alexis".
A B
1
Alberto
2
Alejandro
3
Alex
4 Alexis
5
Allain
6
i=1
Do Until Cells(i, 1) = "Alexis"
i = i + 1
Loop
MsgBox "El nombre Alexis se encontró en la línea " & i
i = la línea donde empezamos el bucle. Ponemos i = 1. Cells(i, 1) significará línea i (=1), columna
1.
Es decir celda A1. Al final del bucle, i nos dará la línea que buscamos.
Do Until Cells(i, 1) = "Alexis" significa que queremos que un bucle que siga hasta que se
encuentre el texto "Alexis".
Al final presentamos una caja de diálogo para presentar el resultado, cual en este caso sería 4.
While... Wend
Ver Do While...Loop.
Do While... Loop
Instrucción que repite las instrucciones mientras una condición es TRUE/VERDADERO.
Ejemplo
Excel tiene valores en las celdas B1:B100. Quieres buscar la primera celda que tenga un valor más
alto/igual que 1,50.
i=1
columna 2. Es decir celda B1. Al final del bucle, i nos dará la línea que buscamos.
Do While Cells(i, 2) <> "" significa que queremos que un bucle siga hasta que no hayan más
celdas con valores en esta columna.
Aplicamos la condición a cada celda, para luego salir del bucle (Exit Do) si encuentra un valor igual
a ó más alto que 1,50 (VBA utiliza punto en vez de coma para decimales).
Observa que el bucle tiene step 1. Esto significa que i se incrementa con 1 cada vuelta. Esto es,
que si queremos un bucle que vaya para atrás, pondríamos step -1.
intValor = 1
For i = 1 to 4 step 1
intValor = intValor + 2
Next i
For Each... Next
Instrucción que repite las instrucciones según el número de objetos especificados. Por ejemplo,
For each Cell de un rango en Excel.
Ejemplo
En este ejemplo vamos a construir un bucle que evalua cada celda de un rango. El rango será
celdas A1:A5, que se escribe como Range(Cells(1, 1), Cells(5, 1). Con el Exit For salimos del bucle
al cumplir la condición.
Dim rngArea
rngArea = Range(Cells(1, 1), Cells(5, 1))
Enlace Descripción
Explorador de informes Explorar informes desde un Panel Principal.
Reloj Crear un reloj en Excel empleando el OnTime.
Barra de progreso Crear una barra de progreso en el StatusBar.
Casilla de verificacion Evento Change para simular una casilla de verificación.
Excel por e-mail Mandar hoja Excel por e-mail.
Sistema de ayuda Emplear el evento Change para proporcionar ayuda al
usuario.
Marcador de teléfono Cómo marcar el teléfono desde Excel (API).
Filtrar con colores Truco para añadir colores al Autofiltro de Excel.
Importar texto de Word a Excel Aplicamos la función 'Create Object' de VBA para importar
textos desde Word.
Colorear celdas al hacer click Un evento de la hoja para colorear celdas Excel
seleccionadas.
Incluir función VBA Excel para Funciónes para que el usuario pueda imprimir las hojas
imprimir Excel cómodamente.
Macro para pegar celdas Excel en Mandar celdas Excel a una tabla nuevo de Word.
tabla Word
Copiar/exportar módulos VBA Ejemplo VBA para exportar módulos.
Importar celdas de Excel a Excel ADO de Excel VBA nos deja conectar con otro libro Excel
para importar datos.
Importar datos de Outlook a Excel Importar datos de Outlook a Excel. (VBA)
Abrir archivo de texto en Excel Ejemplo VBA cómo abrir archivos planos en Excel.
Libros Libros, hojas etc.
Hojas Código para insertar y ordenar las hojas Excel .
Formatos Formatear celdas en Excel (VBA).
Filas VBA: Trabajar con filas.
Columnas VBA: Trabajar con columnas.
País y idiomas del usuario Ejemplo VBA: Devolver el país del usuario.
End sub
o todavía más fácil:
Msgbox Application.ActivePrinter
End sub
Crear lista extensa de información sobre la máquina del usuario
Abajo te presentamos una macro para presentar varios datos del usuario/maquina.
Sub Application_Data()
'dimensiones
Dim strDataArray(10) As String
Dim i, x As Integer
End Sub
'-----------------------------------------------------
Sub SuprimirDatosEnceldas()
End Sub
Determinar idioma de Excel
[a partir de Excel 2000]
Este marcado sirve para averiguar el idioma de Excel del usuario. La función
Application.International de Excel VBA nos ayuda.
Lo único es que hay que saber los marcadores de telefonía de los países para descodficar la
respuesta de la función. Ver por ejemplo esta lista aquí.
El código
Sub DeterminarPais()
CodigoPais = Application.International(xlCountryCode)
End Sub
VBA y libros Excel
Cerrar libro Excel (guardar cambios)
ActiveWorkbook.Close
ActiveWorkbook.Close Savechanges:=True
ActiveWorkbook.Close(True)
Cerrar libro Excel (sin guardar cambios)
ActiveWorkbook.Close(False)
ActiveWorkbook.Close Savechanges:=False
Cerrar libro Excel (variable, sin guardar cambios)
Application.DisplayAlerts = False
Windows(Libro_mayor).Close
Application.DisplayAlerts = True
Workbooks.Open FileName:="C:\Trabajo\Informe.xls"
Abrir libro Excel (diálogo)
strNombre = ActiveSheet.Parent.FullName
MsgBox ActiveWorkbook.FullName
ActiveWorkbook.Sheets.Add Before:=Worksheets("Informe1")
Insertar hoja nueva (primera posición)
Sheets("Informe1").Copy After:=Worksheets(Worksheets.Count)
Mover hoja
Worksheets("informe5").Move After:=Worksheets("Informe4")
Ordenar hojas (orden alfabético)
intNumeroHojas = ActiveWorkbook.Worksheets.Count
For i = 1 To intNumeroHojas
For j = i To intNumeroHojas
If LCase(Worksheets(j).Name) < LCase(Worksheets(i).Name) Then
Worksheets(j).Move Before:=Worksheets(i)
End If
Next j
Next i
Suprimir una hoja 'Informe'
Application.DisplayAlerts = False
For i = 1 To Sheets.Count
Sheets(i).Activate
xxx = ActiveCell.Worksheet.Name
If xxx = "Informe" Then
ActiveWindow.SelectedSheets.Delete
End If
Next
Application.DisplayAlerts = True
Seleccionar primera hoja
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Seleccionar última hoja
ActiveWindow.ScrollWorkbookTabs Position:=xlLast
Imagen fija a un costado de la pantalla
Si queremos que el usuario vea una imagen en el costado superior izquierdo de la pantalla, esté
donde esté en la hoja, podemos aplicar el siguiente código.
Trata de utilizar la propiedad SCROLLROW, que nos da la celda superior izquierdo de la pantalla
visible. Y SCROLLCOLUMN de la columna por supuesto. Luego insertamos un comentario, en la
cual ponemos una imagen y un poco de texto.
El código
'ruta a imagen
strRuta = "C:\imagen.jpg"
'fila/columna actual
intRowActual = ActiveCell.Row
intColumnActual = ActiveCell.Column
'fila/columna de scrollRow
intRow = ActiveWindow.ScrollRow + 1
intColumn = ActiveWindow.ScrollColumn
'insertamos comentario
Cells.ClearComments
With Cells(intRow, intColumn)
.AddComment
.Comment.Text Text:="Hola"
.Comment.Visible = True
End With
End Sub
VBA para proteger ciertas hojas de un libro Excel
Con la ayuda de un truco de VBA de Excel puedes permitir que el usuario solo pueda abrir por
ejemplo la primera hoja (sin palabra de paso) - pero no las otras (cuales requieren palabra de
paso). Esta función no está integrada en Excel (sorprendentemente), por eso hay que recurrir a
VBA.
Este método no da 100% de seguridad. Si activamos la protección de los módulos VBA tenemos
bastante seguridad, pero hay que tener en cuenta que existen varios programas comerciales para
resolver el tema de palabras de paso de Excel.
Los procedimientos
Pon este código en el contenedor 'EsteLibro' del editor VBA (Herramientas - Macro - Editor VBA).
Luego tienes que poner que hojas/palabra de paso (ver 'Preparar modelo' del código).
Dim z As Integer
Dim i As Integer
Dim x As Boolean
Dim varHoja As Variant
Dim varPaso As Variant
Dim varInput As Variant
99:
'conectar Events
Application.EnableEvents = True
End Sub
'*************************************************
End Sub
Crear enlaces a las hojas Excel
Si nuestro libro Excel contiene muchas hojas (hasta 256) convendría hacer una lista de enlaces a
cada hoja. Esto puede ayudar mucho a los 'navegantes' de nuestros libros.
Y como siempre, esta lista se puede crear manualmente. O se puede recurrir a una macro de VBA,
cual tardará al máximo un par de segundos para concluir el trabajo.
Procedimiento
Empezamos con un libro Excel cualquier, pero que tenga por lo menos dos hojas. Luego vamos a
crear un módulo dentro de este libro. En este módulo escribimos el código.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como
"ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código.
Herramientas - Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
El código
Sub Links_hojas()
'crear links
If wsHoja.Name <> wrsHojaActiva.Name Then
intFila = intFila + 1
End If
ProxHoja:
Next wsHoja
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Copia de seguridad
Guarda una copia de seguridad de tu libro. Hazlo porque nunca sabes.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como
"ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código.
Herramientas - Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
El código
Sub QuitarVinculos()
Dim varVinculo As Variant
Dim wrsHoja As Worksheet
Dim objCelda As Object
Dim varMsg As Variant
i=1
Do Until IsEmpty(varLink)
On Error GoTo 9
ActiveWorkbook.BreakLink Name:=varLink(i), _
Type:=xlLinkTypeExcelLinks
i = i + 1
Loop
End If
9:
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Procedimiento
Empezamos con el libro de una o varias hojas. Luego vamos a crear un módulo dentro de este
libro. En este módulo escribimos el código.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como
"ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código.
Herramientas - Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
Código
Sub Crear_archivos_de_hojas()
Dim strHoja, strStartHoja, strRuta As String
Dim i As Integer
Application.ScreenUpdating = False
strStartHoja = ActiveCell.Worksheet.Name
'repetir bucle'
Next
Sheets(strStartHoja).Activate
Application.ScreenUpdating = True
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Recuerda que tienes que adaptar la ruta donde guardar los archivos nuevos (strRuta).
Sub EncontrarUltimaColumna()
End Sub
Encontrar última columna (en fila especificada)
Sub EncontrarUltimaColumna()
End Sub
Suprimir columnas vacías en el rango
Sub SuprimirColumnas()
DeleteRange =("A1:B10")
End Sub
Suprimir cada n-columnas
Sub SuprimirColumnas()
DeleteRange =("A1:B10")
If DeleteRange Is Nothing Then Exit Sub
If DeleteRange.Areas.Count > 1 Then Exit Sub
If n < 2 Then Exit Sub
With DeleteRange
cCount = .Columns.Count
For c = n To cCount Step n - 1
.Columns(c).EntireColumn.Delete
Next c
End With
End Sub
Filtrar con colores en Excel
José Skraviuk | 1/11/2005
El usuario tiene la posibilidad de elegir el color que prefiere. En este caso tiene unos ejemplos pero
se puede agregar más colores.
Descargar archivo
Descargar archivo Excel (zip)
El código
Option Explicit
'JOSE SKRAVIUK
'ayudaexcel@ yahoo.com.ar
If ActiveSheet.AutoFilterMode Then
Set af = ActiveSheet.AutoFilter
iFilterCount = 1
For Each fFilter In af.Filters
If fFilter.On Then
af.Range.Cells(1, iFilterCount) _
.Interior.ColorIndex = Range("color")
Else
af.Range.Cells(1, iFilterCount) _
.Interior.ColorIndex = xlNone
End If
iFilterCount = iFilterCount + 1
Next fFilter
Else
Rows(1).EntireRow.Interior.ColorIndex = xlNone
End If
End Sub
Filas
Encontrar última fila
intUltimaFila = Columns("A:A").Range("A65536").End(xlUp).Row
Encontrar última fila
intUltimaFila = ActiveSheet.UsedRange.Row - 1 +
ActiveSheet.UsedRange.Rows.Count
Encontrar última fila
MaxRow = Cells.SpecialCells(xlLastCell).Row
MaxCol = Cells.SpecialCells(xlLastCell).Column
Encontrar última celda (buscar al revés)
intLastRow = Columns("A:A").Range("A65536").End(xlUp).Row
For r = intLastRow To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
Suprimir filas vacías
Procedimientos
Vamos a necesitar tres sencillas macros.
Luego hacen falta dos botones en la hoja, uno para la macro StartTemporizador, y otro para la
StopTemporizador.
Declaraciones
Por encima de las macros descritas abajo, hacemos las declaraciones.
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Tu procedimiento
Aquí pones lo que quieres que Excel haga periodicamente.
Sub Tu_Sub()
MsgBox datHora 'o cualquier instrucción
'reiniciar el temporizador
StartTemporizador
End Sub
Cerrar temporizador
El temporizador hay que cerrarlo 'manualmente'.
Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Todo el código
Ahora, el módulo de las macros descritas arriba debe tener el siguiente aspecto.
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Sub Tu_Sub()
MsgBox datHora 'o cualquier instrucción
'reiniciar el temporizador
StartTemporizador
End Sub
Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Mostrar un formulario VBA durante un tiempo
predeterminado
Con el método WAIT puedes hacer que un formulario se cierre después de un tiempo determinado.
Esto puede ser útil para presentar información al usuario ('La importación ha terminado con éxito',
'El archivo está guardado' etc). El truco está en utilizar el método WAIT de VBA.
Procedimiento
Crea un formulario 'frmMensaje' con el mensaje que quieres que aparezca. Añade este código al
formulario. El ejemplo nos dice que la rutina se va a esperar ('Wait') hasta la hora
Now + TimeValue("00:00:04")
Sub Importar_Access()
Private Sub UserForm_Activate()
Application.Wait Now + TimeValue("00:00:04")
frmMensaje.Hide
End Sub
Luego, para mostrar el formulario en cualquier parte de tu programa, aplicas este código.
frmMensaje.Show
En el ejemplo de abajo, el formulario se mostrará al abrir el libro (ponemos el código en el
contenedor de código VBA 'EsteLibro'.
Un ejemplo de como podemos crear una barra de progreso para incluir en nuestras aplicaciones
Excel.
El código
Option Explicit
Sub BarraDeProgreso()
Dim R As Integer
Dim MT As Double
For R = 1 To 180
MT = Timer
Do
Loop While Timer - MT < 0.05
Application.StatusBar = "Progress: " & R & " de 180: " & _
Format(R / 180, "Percent") & " --- " & "Cumplimiento"
DoEvents
Next R
Application.StatusBar = False
End Sub
Como armar un reloj en Excel (método OnTime).
José Skraviuk | 28/12/2005
Sub Reloj()
Range("A1").Formula = "=NOW()"
Application.OnTime Now + TimeValue("00:00:01"), "reloj"
End Sub
Sub auto_Open()
Call Reloj
End Sub
Imprimir la hora en la hoja Excel
Según el código VBA descrito arriba, Excel pondrá el tiempo en la celda A1. Para
devolver fragmentos (hora/minuto/segundo), emplea formulas como
= HORA("A1")
= MINUTO("A1")
= SEGUNDO("A1")
Formatos y VBA
Excel pone a disposición un montón de formatos. Abajo presentamos como modificar algunos de
ellos a través de VBA.
Redondear celdas
Cells.Select
With Selection.Font
.Name = "MS Sans Serif"
.Size = 10
End With
Líneas de división
ActiveWindow.DisplayGridlines = False
Indice de colores
Range("A1:B10").Interior.ColorIndex = 44
Cambiar entre estilos A1 / RC
Application.ReferenceStyle = xlA1
Application.ReferenceStyle = xlR1C1
Excel VBA y colores
Excel trabaja con una paleta de 56 colores predefinidos. Puedes cambiar estos desde
Herramientas - Opciones - Color o desde código VBA. Por desgracia, a muchos de nosotros los
colores predefinidos por Microsoft parecen bastante fuertes, y a veces hacen que la hoja sea difícil
de leer.
Los colores forman parte del diseño del libro, son importantes para una buena presentación de un
informe. Pero por regla general tampoco se debe pasar utilizando demasiado color.
Colores RGB
Excel expresa colores del formato RGB (Red, Green, Blue). Red, Green, Blue son variables cuales
expresan el grado de estos colores, valores entre 1 y 255. Tambien podemos expresar el color en
formato HEX (hexadecimal).
Para cambiar entre RGB y HEX necesitamos un Conversor RGB <> HEX.
Otra solución es crear una macro cual nosotros podemos llamar cuando nos convenga. Esto nos da
un poco más de control. En este ejemplo cambiaremos los colores 40 y 41 (de los 56) de la paleta.
Selection.Interior.ColorIndex = 40
Selection.Interior.ColorIndex = _
xlNone/xlColorIndexAutomatic/xlColorIndexNone
Selection.Interior.Color = RGB(234, 234, 234)
Selection.Interior.Color = ?000066? 'hexadecimal
Resetear paleta de colores
Para resetear los colores a los predefinidos de Excel, aplicamos el método ResetColors.
ActiveWorkbook.ResetColors
Copiar colores de otro libro
También se puede copiar (importar) la paleta de otro libro Excel. Para esto cambiamos la
propiedad Colors del libro.
ActiveWorkbook.Colors = Workbooks("C:\MiLibroDeColores.xls").Colors
Devolver colores
A lo mejor nos interesa saber que color tiene una celda. La propiedad ColorIndex nos ayuda.
i = Cells(1, 1).Interior.ColorIndex
MsgBox i
Aplicar colores por condiciones
Podemos colorear celdas por condiciones, evaluando una cadena de texto, por ejemplo.
En este ejemplo buscaremos en una lista de apellidos. En el ejemplo abajo, "Aban" nos devuelve
dos apellidos. Otro ejemplo sería 'queiro", c ual nos devolvería Abanquiero.
Preparamos la hoja
En celdas C5:C12 tenemos la lista en que buscar (celdas D5:D12 también pertenecen a la matriz.
En celdas G5:H5 el programa pondrá la lista "filtrada", allí no tienes que introducir nada.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como
"ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código.
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Buscar_Texto_En_Lista()". Marca esta, y "Ejecutar".
Código
Sub Buscar_Texto_En_Lista()
'dimensiones
Dim lngUltimaFila As Long
Dim strObjetoBuscar As String
Dim lngResultado As Long
Dim lngColumna As Long, lngFila As Long
Dim lngPegarColumna As Long, lngPegarFila As Long
Dim x As Integer, n As Integer
'objeto a buscar
strObjetoBuscar = Range("G2").Text
If strObjetoBuscar = "" Then GoTo 99
'minúsculas
strObjetoBuscar = LCase(strObjetoBuscar)
'evaluación
lngResultado = InStr(1, Cells(n, 3), _
strObjetoBuscar, vbTextCompare)
'copiar/pegar
If lngResultado > 0 Then
Range(Cells(n, 2), Cells(n, 4)).Copy
Range( _
Cells(lngPegarFila, lngPegarColumna), _
Cells(lngPegarFila, lngPegarColumna + 2)) _
.Select
ActiveSheet.Paste
lngPegarFila = lngPegarFila + 1
End If
Next n
'aparcar
Application.CutCopyMode = False
Range("G2").Select
99:
End Sub
Sumar rango variable con VBA Excel
Sumar un rango en Excel es fácil. Sumar un rango expresado por una variable en VBA es un poco
más complicado (pero sigue siendo fácil).
No siempre se sabe de antemano que celdas formarán parte del rango a sumar. Entonces tenemos
que expresar el rango de forma variable.
En Excel es fácil sumar este rango mediante una sencilla fórmula. Pero VBA no contiene ninguna
función igual. Entonces hay que hacer que VBA utilice las funciones de Excel.
Application.WorksheetFunction.Sum(varSuma)
De esta manera puedes aplicar cualquier fórmula de Excel en VBA, con tal de que empieces la
línea de código con
Application.WorksheetFunction...
Nuestro ejemplo
En este ejemplo el rango que nos interesa sumar son los valores correspondientes a "BB", es decir
C8:C13.
'sumar el rango
Cells(1, 1) = Application.WorksheetFunction.Sum(varSuma)
Escribir la suma (variable)
'el rango a sumar
varSuma = Range(Cells(8, 3), Cells(13, 3))
'sumar el rango
SUMA = Application.WorksheetFunction.Sum(varSuma)
Excel y archivos Ascii
A veces queremos guardar datos en un archivo de texto (archivo Ascii), por ejemplo de tipo CSV o
de tipo sequencial (posiciones fijas). Es decir, utilizar un archivo de texto como una sencilla base
de datos.
Si los datos que tenemos que guardar son pocos, conviene guardarlos en un archivo Ascii en vez
de una base de datos 'de verdad' como Access.
Hay que tener un cuenta que los datos guardados en archivos Ascii ocuparán más espacio que en
una base de datos de verdad. Pero para guardar hasta unos mil líneas de texto no hay problema
ninguno.
Comando OPEN
El OPEN nos hace posible crear/abrir un archivo de texto, para luego proceder a escribir a este
archivo.
Output
Abrir (o crear) el archivo (suprime todo ya grabado) para escribir. Es decir que, si el archivo
existe, borrará todo los datos ya grabados.
Append
Input
Sobre la '#f': Para trabajar con el contenido de estos archivos hay que llamar a los archivos de
una manera numérica. Si utilizamos el FREEFILE, no habrá que preocuparse de esta numeración.
Comando PRINT
El PRINT se emplea para la forma sequencial (posiciones fijas) = 'tal como está'. En los ejemplos
abajo utilizaremos el comando PRINT.
Comando WRITE
El WRITE se utiliza para la forma sequencial CSV (Comma Separated Value - Valor separado por
coma). Esto significa que añadirá una coma entre cada bloque de texto. Esto ayuda a la hora de
importar un archivo Ascii a Excel.
Ejemplo: Print #f, "Fecha de hoy: " & Date ; " Application.UserName
Cada bloque de texto se delimita del próximo por el carácter ';'.
Sub Crear_Escribir_ArchivoAscii()
'escribimos al archivo
Print #f, "Fecha de hoy: " & Date
Print #f, "Usuario: " & Application.UserName
End Sub
Escribir archivo Ascii - APPEND
Sub Crear_Escribir_ArchivoAscii()
'escribimos al archivo
Print #f, "Fecha de hoy: " & Date
Print #f, "Usuario: " & Application.UserName
End Sub
Leer archivo Ascii - INPUT
Sub Leer_ArchivoAscii()
End Sub
Messagebox y Excel VBA
Las messagebox son muy útiles (y fáciles de usar), y crea una interfaz entre el usuario y el
programa. Sirven para
Respuesta = Msgbox("Mensaje", _
Botones/íconos, "Título")
Mensaje
Cualquier tipo de texto. Para crear un salto de línea empleamos el carácter vbCrLf.
vbOkOnly
vbOkCancel
vbYesNoCancel
vbAbortRetryIgnore
Íconos
Puedes elegir entre los siguientes.
vbCritical
vbQuestion
vbExclamation
vbInformation
Título
Cualquier texto.
Devolver información
Si quieres que el programa utilice la respuesta del usuario, estas son las cifras que te devuelve.
Ok = 1
Cancel = 2
Abort = 3
Retry = 4
Ignore = 5
Yes = 6
No = 7
Ejemplos
Te ponemos unos ejemplos módelo para que te vayas acostumbrando a las diferentes
messagebox.
Sub MessageBox()
msgbox "Actualización terminada:", _
vbOKOnly, "Información"
End Sub
Sub MessageBox()
msgbox "¿Quieres seguir?", vbYesNo, _
"Información importante"
End Sub
Sub MessageBox()
Dim intRespuesta As Integer
intRespuesta = msgbox("¿Quieres seguir?", _
vbQuestion + vbYesNo, "Información importante")
If intRespuesta = 6 Then
msgbox "Seguimos"
Else
msgbox "Terminamos"
End If
End Sub
Sub MessageBox()
msgbox "Actualización terminada:" & _
vbCrLf & vbCrLf & _
"- Importación de datos de venta." & vbCrLf & _
"- Cálculos de impuestos." & vbCrLf & _
"- Venta por proveedor." & vbCrLf _
, vbOKOnly, "Actualización terminada."
End Sub
Sub MessageBox()
msgbox "Actualización terminada:" & vbCrLf & _
vbCrLf & _
"- Importación de datos de venta." & vbCrLf & _
"- Cálculos de impuestos." & vbCrLf & _
"- Venta por proveedor." & vbCrLf _
, vbExclamation + vbOKOnly, _
"Actualización terminada."
End Sub
Dígitos de control
En este ejemplo presentamos un ejemplo de marcado VBA para calcular los dígitos de control de
una cuenta bancaria española.
Tarea
Queremos un programa que nos calcule los dígitos de control de una cuenta.
Un ejemplo de cuenta
0123 - 4567 - xx - 0123456789
Entidad 0123
Oficina 4567
Dígitos de control xx
Cuenta 0123456789
Empezamos
Abrimos un libro nuevo. Formateamos las celdas B3:E3 a TEXTO.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como
"ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código.
Herramientas - Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
El código
Sub DC_check()
Valor1 = (Mid(BankOffice, 1, 1) * 4)
Valor2 = (Mid(BankOffice, 2, 1) * 8)
Valor3 = (Mid(BankOffice, 3, 1) * 5)
Valor4 = (Mid(BankOffice, 4, 1) * 10)
Valor5 = (Mid(BankOffice, 5, 1) * 9)
Valor6 = (Mid(BankOffice, 6, 1) * 7)
Valor7 = (Mid(BankOffice, 7, 1) * 3)
Valor8 = (Mid(BankOffice, 8, 1) * 6)
'evaluar DC completo
If TestValueDC = DC Then
Test = True
MsgBox "Correcto."
Else
Test = False
MsgBox "DC no corresponde a esta cuenta." & vbCrLf & _
"[en este caso DC sería " & TestValueDC & ".]", vbOKOnly, vbInformation
End If
'---------------------------------------------------
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Resumen
Si tu pc está equipado con módem podrás realizar llamadas desde Excel, teniendo el número en
una lista.
A través de una API (instrucción Windows) podemos hacer que Excel arranque el Marcador
Telefónico.
Para usar tienes que marcar la celda con el nº, y luego dar marcar.
Configuraciones
Hay una parte del código, que se puede configurar, por si alguien quiere llamar desde un lugar
donde se trabaja con una central telefonica. Generalmente para tomar una linea te pide que
marques el (0).
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Option Explicit
Private Declare Function tapiRequestMakeCall _
Lib "TAPI32.DLL" _
(ByVal Dest As String, _
ByVal AppName As String, _
ByVal CalledParty As String, _
ByVal Comment As String) As Long
End Sub
Resumen
Un bonito ejemplo de como usar el evento Change, para proporcionar ayuda acerca de la celda
seleccionada.
Este truco Excel permite proporcionar ayuda en línea al usuario, acera de la celda seleccionada.
Esto puede resultar útil a la hora de construir formularios (no los de VBA, sino los formularios a
rellenar de toda la vida...) en una hoja Excel.
El código
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Resumen
Se usa el evento change para simular una casilla de verificación, en la columna A, y luego
combinamos con una suma condicional, que que solamente SUMA los meses que se encuentran
tildados.
Un ejemplo real
Al hacer clic sobre la columna A, tilda la celda.
Luego se puede aplicar una fórmula matricial y condicional para sumar los meses tildados.
{=SUMA(SI($A$2:$A$13<>"";$C$2:$C$13;0))}
El código
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim aOffset As Integer
On Error GoTo err_handler
Application.EnableEvents = False
If Not Application.Intersect _
(Target, Columns("A")) Is Nothing Then
If Target.Column = 4 Then
aOffset = 3
Else
aOffset = 2
End If
If IsEmpty(Target.Value) Then
With Target
.Font.Name = "Wingdings"
.Value = Chr(252)
End With
Target.Offset(0, iOffset).Select
Else
Target.Value = ""
Target.Offset(0, iOffset).Select
End If
End If
err_handler:
Application.EnableEvents = True
End Sub
Comentarios
Para evitar confusiones (sobre todo si estamos preparando una plantilla para otras colegas),
podríamos optar por la fórmula SUMAPRODUCTO, que además permite aplicar varias condiciones
de una manera fácil. / Anders J.
=SUMAPRODUCTO((A2:A13<>"")*C2:C13)
Explorador de informes
José Skraviuk | 8/09/2006
Instrucciones
Encontrarás un ejemplo real del Explorador de archivos Excel aquí. Para ver el código
utilizado, combine las siguientes Teclas:ALT + F11.
Esta maniobra también puede realizarse desde los menús del propio programa Access. ¿Pero qué
pasa si tenemos que acceder a un archivo Access, y no tenemos el programa Access instalado?
Entonces podemos recurrir al código VBA, y programar una macro.
Además, esta importación tarda poquísimo - muy interesante si importamos muchas
tablas al día.
El código
Sub Importar_Access()
'dimensiones
Dim datConnection As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim lngTablas As Long
Dim i As Long
'crear la conexión
Set datConnection = New ADODB.Connection
Set recSet = New ADODB.Recordset
datConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source =" & strDB & ";"
'consulta SQL
strSQL = "SELECT * FROM " & strTabla & ""
recSet.Open strSQL, datConnection
'copiar rótulos
lngCampos = recSet.Fields.Count
For i = 0 To lngCampos - 1
ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name
Next
'desconectar
recSet.Close: Set recSet = Nothing
datConnection.Close: Set datConnection = Nothing
End Sub
Objetos utilizados
Para contactar con Outlook desde Excel podemos utilizar el objeto GetNameSpace de la MAPI -
Messaging Application Programming Interface.
Sub ImportarContactos()
'rotulos
Cells(1, 1) = "Nombre"
Cells(1, 2) = "E-mail"
Cells(1, 3) = "Título"
Cells(1, 4) = "Empresa"
Cells(1, 5) = "Tel (casa)"
Cells(1, 6) = "Tel (móbil)"
Cells(1, 7) = "Tel (trabajo)"
Cells(1, 8) = "Fax (trabajo)"
Cells(1, 9) = "Dir. (empresa)"
Cells(1, 10) = "Postal (empresa)"
Cells(1, 11) = "Ciudad (empresa)"
Cells(1, 12) = "País (empresa)"
Cells(1, 13) = "Dir. (casa)"
Cells(1, 14) = "Postal (casa)"
Cells(1, 15) = "Ciudad (casa)"
Cells(1, 16) = "País (Casa)"
End Sub
Enviar hoja Excel por e-mail
José Skraviuk | 12/11/2005
Resumen
Este truco sirve para enviar una hoja Excel por mail, utilizando Outlook u otro sistema de correo
instalado en el ordenador del usuario.
El código
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Sub Mail_ActiveSheet()
Dim wb As Workbook
Dim strdate As String
Dim stEmail As String
Application.ScreenUpdating = False
ActiveSheet.Copy
Set wb = ActiveWorkbook
With wb
.SaveAs ThisWorkbook.Name & " " & strdate & ".xls"
.SendMail strEmail, "Archivo Adjunto"
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close False
End With
Application.ScreenUpdating = True
End Sub
Configuraciones
Hay que indicar la dirección a utilizar.
strEmail = "aaa.bbb@ccc.com"
SQL para VBA de Excel
Excel y Bases de datos SQL
VBA de Excel te permite conectar con prácticamente cualquier base de datos externa para sacar o
grabar datos. Un ejemplo típico de estas aplicaciones es la importación automatizada de datos a
Excel desde una base de datos externa.
Esto significa que debemos incluir trozos de código SQL en nuestra programación VBA para poder
realizar esta tarea.
¿Qué es SQL?
SQL (Structured Query Language o Lenguaje de consultas estructurado) es un lenguage
que se utiliza para organizar, gestionar y recuperar datos de bases de datos. Con SQL se puede
consultar bases de datos para buscar/escribir etc datos.
Surgió de IBM a finales de los años 70. Posteriormente adoptado por ANSI (American National
Standards Institute). La última version se llama SQL-99, y todas las bases de datos comúnes son
compatibles.
Ejemplos de comandos SQL
Abajo presentamos información básica sobre algunos de los
comandos SQL que emplearías al programar una macro de este tipo.
Capítulo Comando Descripción
SQL y tablas CREATE Crear nuevas tablas y campos
DROP Eliminar tablas
ALTER Modificar tablas o agregar campos
TRUNCATE Eliminar contenido de tablas
SQL y registros SELECT Consultar registros
SELECT INTO Consultar/escribir registros
INSERT Insertar nuevos registros
UPDATE Modificar registros
DELETE Eliminar registros
SQL y condiciones FROM Especificar tabla de origen
WHERE Espeificar condiciones
GROUP BY Separar registros seleccionados en grupos
ORDER BY Ordenar registros seleccionados según criterio
SQL y operadores AND TRUE si dos registros cumplen condición
OR TRUE si uno de dos registros cumple
NOT Negación lógica - devuelve el valor contrario
< Menor que
> Mayor que
<> Distinto de
<= Menor o igual que
>= Mayor o igual que
= Igual que
BETWEEN Especificar intervalo de valores
SQL y variables Incluir variables en las consultas
Ejemplo
Varchar significa que esa columna solo puede contener texto. La longitud máxima (opcional) se
puede poner entre paréntesis. Otros formatos son
integer » números integrales
decimal » números con decimales
char » todo tipo de contenido
date » fecha en formato yyyymmdd.
DROP
Para suprimir tablas o bases de datos.
TRUNCATE
Para suprimir el contenido una tabla (y no toda la tabla en si). Puede ser muy útil de vez en
cuando.
ALTER
Para añadir/suprimir columnas en una base de datos.
Ejemplo
INSERT
Para grabar nuevos registros en la base de datos.
UPDATE
Para modificar datos de una tabla.
UPDATE nombre_tabla
SET nombre_columna = nuevo valor, nombre_columna2 = nuevo valor2...
WHERE nombre_columna = un valor
DELETE
Para suprimir datos de una tabla.
WHERE
Se utiliza para escpecificar condiciciones en la consulta de la base de datos. Utilizado con el
comando SELECT, más un operador y luego la condición en si.
SELECT nombre_columna
FROM nombre_tabla
WHERE nombre_columna2 operador valor
Unos de los operadores que WHERE admite son
Operador Explicación
AND TRUE si dos registros cumple la condicion.
OR TRUE si uno de los registros cumple la condicion.
NOT Negación lógica. Devuelve el valor contrario.
< Menor que.
> Mayor que.
<> Distinto de.
<= Menor ó Igual que.
>= Mayor ó Igual que.
= Igual que.
BETWEEN Especificar un intervalo de valores.
GROUP BY
Para separar registros seleccionados en grupos. Interesante si quieres sumar cada registro distinto
de una columna. Si no aplicas el GROUP BY, cada suma será el total de todos los registros, y no la
suma de cada registro único.
ORDER BY
Para ordenar los registros.
COUNT(*)
Devuelve el número de registros en una tabla.
SELECT COUNT(*)
FROM nombre_tabla
SUM
Devuelve la suma de una columna. Le parece a la función AVG arriba.
SELECT SUM(nombre_columna)
FROM nombre_tabla
SELECT SUM(ImporteRemesa)
FROM Remesas
WHERE (ImporteRemesa < 2400)
MAX
Devulve el valor más alto de una columna.
SELECT MAX(nombre_columna)
FROM nombre_tabla
MIN
Devulve el valor más bajo de una columna.
SELECT MIN(nombre_columna)
FROM nombre_tabla
Ejemplo
Sacamos el salario de un empleado que especificamos en una celda de Excel, o en una caja de
texto de VBA etc. Luego convertimos este nombre a una variable llamada Empleado
strSQL = "SELECT Salario FROM tabla_Salarios WHERE Empleado LIKE '" & Empleado & "' "