Você está na página 1de 115

La historia de las hojas de cálculo Excel

Hoy en día, Microsoft Excel domina el mercado de las hojas de cálculo, obteniendo una
cuota de mercado alrededor de 90%.

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.

Ejemplos de algunas versiónes de hojas de cálculo


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

Posiblemente la versión de Excel más extendido. 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

El Office 2007 tiene un aspecto diferente, es decir un sistema nuevo de los menús. Han
mejorado los gráficos bastante. Sin embargo, la verdad es que Excel lleva ya 10 años sin
cambios ni novedades significativos.

Numeración de las versiones de Excel


Microsoft tiene una numeración de los productos Office, para todos los programas de
este suite ofimático:

Numeración Versión Excel


12 Excel 2007
11 Excel 2003
10 Excel 2002 'XP'
9 Excel 2000
8 Excel 97
7 Excel 95

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.

Sub Devolver_VersionExcel()

Dim intVersionExcel as String

intVersionExcel = Application.Version
Msgbox intVersionExcel

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)
• fórmulas (ecuaciones o funciones propias de Excel/usuario)
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)


• Formato = fondo verde
• Formato = fuente Arial
• 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.

Introducción a los formatos de Excel


El formato de una celda decide el aspecto de la misma, y como se presentarán los
valores y textos introducidos. Es decir, si la celda va a tener bordes, color de fondo,
tamaño de la fuente, número de decimales etc.

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:

Número: Decimales = 2, Separador de miles = Sí

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.

Hay unos atajos rápidos para formatear celdas.

CTRL + SHIFT + ! = 2 decimales/separador miles


CTRL + SHIFT + % = porcentaje
CTRL + SHIFT + # = formato fecha
Alineación
Haz uso de la propiedad alinear, si necesario. Muchas veces el título de la columna es
un texto, y luego vienen las cifras haca abajo. Recuerda que Excel por defecto alinea
texto hacia izquierda, y valores hacia derecha. Si la columna es muy ancha, la conección
intuitiva entre título y valores se puede perder. Al otro lado, esta diferencia de
alineación puede servir para mostrar que unas celdas contienen texto, y otras valores.

Code Precio
AAA 28,48
ABA 298,55

En ej ejemplo de arriba, el título "Precio" debería estar alineada hacía derecha.

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.

Introducción a los formatos


personalizados

¿Qué son los formatos personlizados?


A veces los formatos predefinidos de Excel no dan - hace falta aplicar un formato
personalizado a tus celdas.

Con bastante frecuencia quiero que celdas que contienen fechas tengan el formato
AAAA-MM-DD (año-mes-día, 2004-01-17) como algunos sistemas informáticos
trabajan con este formato.

Pero hay un problema; este formato no siempre está presente en todos los ordenadores.
Entonces se crea su propio formato AAAA-MM-DD.

Crear un formato personlizado


El diálogo de Formatos se abre tecleando Ctrl+1 o desde el menú contextual (click
derecho en celda, Formato de celdas, Número, Personalizada. A la derecha, en la caja de
texto Tipo se entra el formato.
Unos ejemplos sencillos
Empezamos con unos ejemplos para que veas el efecto del formato.

Formato Valor celda Output celda


AAAA-MM-DD 17-ene-04 2004-01-17
MMMM 17-ene-04 Enero
DDD 17-ene-04 Sab
[Azul][>0,00]0%;[Rojo]-[<0,00]0%;- -0,45 -45%
El ejemplo arriba: Azul/formato porcentaje sin decimales si mayor que 0,00. Rojo si
menor que 0,00. '-' si equivale a 0,00.
#.##0,00 1125100012,2587 1.125.100.012,26
#.##0,00 52,21 52,21
0000,00 52,21 0052,21
#" "??/?? =7/2 3 1/2
##0,0E+0 100000 100,0E+3

Descripción del formato personalizado


en Excel
Consta de 4 secciones, para los distintos tipos de valores que quieres tratar. Se
separan con ';' (punto y coma).
S
Formato si el contenido es
ección
1 Positivo
2 Negativo
3 Cero
4 Texto
Símbolo Comentario
0 Marcador de dígito. Rellenar las posiciones que falten.
# Marcador de dígito. No rellenar las posiciones que falten.
? Marcador de dígito. Para alinear comas decimales.
, Separador decimal.
. Separador de miles.
% Porcentaje
E Notación científica.
@ Marcador de texto.
_ Subrayado. Se salta el ancho de un carácter. Para alinear texto/números.
d Día (un dígito)
dd Día (dos dígitos)
ddd Día (lun, mar, mie,...)
dddd Día (nombre completo)
m Mes (un dígito)
mm Mes (dos dígitos)
mmm Mes (ene, feb,...)
mmmm Mes (nombre completo)
aa Año (dos dígitos)
aaaa Año (cuatro dígitos)

Formatos de texto en Excel


Dividir texto en múltiples líneas
Para poder escribir en varias líneas dentro de una celda, pulsa ALT + INTRO para saltar
a la próxima línea.

Numerar una lista


Para la numeración de una lista (irregular) puedes utilizar la siguiente fórmula.

B3= IF(C3<>"";COUNTA($C$3:C3)&".";"")
B4= IF(C4<>"";COUNTA($C$3:C4)&".";"")

Luego se copia la fórmula hacia abajo.


Poner la fecha actual
Para poner la fecha de hoy en una celda, teclea CTRL + SHIFT + ;

Atajos del teclado en Excel

El uso de los atajos del teclado en Excel aumentará tu productividad, todo usuario
avanzado de Excel lo puede garantizar. Los atajos te pueden ahorrar bastante tiempo.

Los atajos de Excel son imprescindibles para muchos usuarios de Excel y VBA.

Sin duda alguna es buena idea aprender de memoria los atajos más útiles como por
ejemplo CTRL + C para copiar las celdas Excel seleccionadas.

Unos atajos útiles de teclado de Excel


Presentamos unos atajos imprescindibles a la hora de trabajar en Excel.

• Ctrl + C: Copiar
• Ctrl + V: Pegar
• Ctrl + X: Cortar
• F2: Entrar contenido en una celda
• Ctrl + signo más/signo menos: Permite añadir filas o columnas
• Ctrl + 1: Cambiar el formato de la celda seleccionada

Recopilación de varios atajos de teclado en Excel


Enlaces a nuestras listas más extensas de atajos de teclado Excel.

Enlace Tipo de atajo


Selecciones Seleccionar celdas, rangos...
Moverse Moverse entre libros, hojas...
Libros Abrir libros, guardar...
Introducción de datos Introducción de datos.
Formatos Formatear celdas y rangos...
VBA editor Trabajar más eficaz con el editor de VBA.
Atajos para seleccionar objetos en Excel
Cómo seleccionar rapidamente celdas y rangos en Excel.

Seleccionar grandes rangos


Todas las celdas CTRL + A
Extender una pantalla para abajo CTRL + Re Pag.
Extender una pantalla para
CTRL + Av Pag.
arriba
Seleccionar celdas adjuntas
Extender una celda MAYUS + Flecha
Extender una celda F8 + Flecha
Seleccionar rango adjunta CTRL + MAYUS + *
Seleccionar filas/columnas
Seleccionar fila MAYUS + Barra
Seleccionar columna CTRL + Barra
Seleccionar parte de fila/columna
Extender a la última celda de fila/columna CTRL + MAYUS + Flecha
Extender a la última celda usada (bajo derecha) CTRL + MAYUS + Fin
Extender a principio de la fila MAYUS + Inicio
Extender a principio de la hoja CTRL + MAYUS + Inicio
Seleccionar celdas no adjuntas
Usa esta instrucción después de seleccionar cada rango independiente MAYUS + F8
Presiona CTRL y selecciona cada rango independiente CTRL + ratón

Atajos Excel para moverse entre celdas y


libros

Moverse por la hoja


Moverse un celda Flechas
Moverse al borde de celdas adjuntas CTRL + Flechas
Moverse a principo de la fila Inicio
Moverse a principo de la hoja CTRL + Inicio
Moverse a la última celda usada (bajo der.) CTRL + Fin
Moverse una pantalla para abajo Re Pag.
Moverse una pantalla para arriba Av Pag.
Moverse entre hojas
Moverse a la próxima hoja CTRL + Av Pag.
Moverse a la hoja anterior CTRL + Re Pag.
Moverse entre libros
Moverse al próximo libro CTRL + F6
Moverse al próximo libro CTRL + Tab
Moverse al próximo programa de Excel Alt + Tab
Otros
Diálogo de BUSCAR MAYUS + F5
Diálogo de BUSCAR CTRL + F
Diálogo de REEMPLAZAR CTRL + H
Diálogo de GOTO F5

Atajos Excel para manejar plantillas


Atajos para manejar plantillas y hojas Excel de una forma más eficaz.

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 la introducción de datos en


Excel
Estos atajos Excel te ayudarán a manejar textos, fórmulas y rangos de una forma
eficaz.

Edición
Editar celda F2
Cancelar Esc
Moverse al principio de la fila Ctrl + Intro
Completar el editar celda, moverse una celda para abajo Tab
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 de teclado para formatos Excel


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

Referencias

Enlace Descripción
Tipos Tipos de referencias.
Estilos A1 vs. R1C1.
Relativas y absolutas Subtipos de referencias

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).

Ejemplos de propiedades de una referencia


Tipo Referencia
Interna Celdas de la misma hoja o libro.
Externa Celdas de otro libro Excel.
Remota Referencia a otro programa.
Referencia interna
Se refiere a celdas de cualquier hoja del mismo libro. Una hoja Excel te da 256
columnas y 65.536 filas. Esto suma 16.777.216 celdas por hoja. Un libro de 10 hojas
tiene 167.772.160 celdas entonces. Una referencia interna identifica una o más de estas
celdas.

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.

Cambiar entre A1 y R1C1


Para cambiar entre A1 y R1C1:

Herramientas - Opciones - General

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 columna B: = $B2.

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 y Funciones - Hojas de cálculo


Excel

Las fórmulas y funciones de Microsoft Excel 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.

Una fórmula o función Excel calcula un valor nuevo a partir de valores contenido en
celdas únicas o en rangos de varias celdas de la hoja de cálculo. Aparte de números y
valores, las fórmulas Excel contienen operadores. Estos escpecifican qué operaciones
usar.
Operadores utilizados en fórmulas Excel
Los operadores especifcan que tipo de cálculos la fórmula va a ejercer sobre los
elementos de la fórmula Excel. Se puede dividir los operadores de Excel en 4
categorías. Sigue las enlaces para leer más de cada uno.

Ten en cuenta que Excel tiene varios juegos de operadores. Las formulas tienen los
suyos, VBA tiene otros, pero que a veces coinciden. Ver operadores de VBA.

Enlace Descripción
Operadores aritméticos Adición etc.
Operadores comparador Resultados lógicos, como VERDADERO/FALSO.
Operadores concatenar texto Adjuntar texto.
Operadores referencias de rango Lo que divide primer/último area de un rango.
Operadores lógicos Para evaluar cadenas de texto/valores.

Fórmula TEXTO en Excel

Si concatenamos (adjuntamos) el contenido de dos o más celdas, y una de estas


contienen un valor y un fórmato específico, tendríamos que utilizar la fórmula TEXTO.

La fórmula es bastante sencilla - a lo mejor lo más complicado es averiguar cómo


expresar el formato.

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.

="Por los "&TEXTO(D5;"# ###,00")&" kg de papayo se facturará "&TEXTO(D6;"#


###,00")&" Euros"
Sumar por mes en Excel
En el trabajo diario de contabilidad, controlling etc, y de otros campos también
supongo, sacar el mes de una fecha puede ser algo muy interesante. Un ejemplo:
Hemos importado a Excel una lista de 37.000 ventas y sus correspondientes importes y
fechas desde el libro mayor. ¿Cómo sumar por mes, sin utilizar tablas dinámicas?

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.

C20:C21: Luego sumamos por condiciones (ene-04 = 2004-01-01 etc).


Calcular el tiempo transcurrido entre dos
fechas en Excel
• José Skraviuk | 11/11/2005

Fórmula Excel cual nos permite ver como hallar el tiempo transcurrido entre dos fechas.

Las funciones INFO y CELDA en Excel

Repasamos unas funciones Excel no tan conocidas. Las fórmulas INFO y CELDA nos
permiten devolver información tanto del sistema como de celdas concretas, y
presentarla en cualquier celda Excel. Esto puede ser bastante interesante a la hora de
diseñar un proyecto en Excel..

Además, estas fórmulas Excel se pueden aplicar dentro del código VBA. Es una manera
muy rápida para devolver por ejemplo la versión de Excel.

Una advertencia
Estas funciones no se recalculan automaticamente, sino hay que hacerlo manualmente
(pulsar F9).

INFO
Concepto Fórmula Ejemplo
Sistema pc/mac =INFO("system") pcdos/mac
Versión de Excel =INFO("release") 10.0
Sistema operativo =INFO("osversion") Windows (32-bit) NT 5.01
Carpeta actual =INFO(directory") C:\excel_vba
Memoria disponible =INFO("totmem") 2 013 088
CELDA
Para más información de CELDA, ver la ayuda de Excel.

Concepto Fórmula Ejemplo


Ruta + Hoja del libro C:\Mi Excel\
=CELDA("archivo";A1)
actual [MisFormulas.xls]Hoja1

Fórmulas CONTAR.SI /
SUMAPRODUCTO
En este capítulo explicamos como contar celdas que cumplan con una o más
condiciones.

CONTAR.SI - una condición

La fórmula CONTAR.SI cuenta el número de celdas de un rango que cumplan con una
única condición.

Condición en otra celda (por ejemplo C1)

=CONTAR.SI(A1:A5;"="&C1)

El operador se puede cambiar a <, >, <> etc.

CONTAR.SI - dos condiciones


Aplicar dos condiciones a la fórmula CONTAR.SI es un poco complicado. Por eso es
más fácil recurrir a la fórmula SUMAPRODUCTO.

Dos condiciónes numéricas

=SUMAPRODUCTO((A1:A5>6)*(A1:A5>9))

Poner condición en otra celda (por ejemplo C1)

=SUMAPRODUCTO((A1:A5>C1)*(A1:A5>9))

Resaltador de registros en Excel


• José Skraviuk | 26/09/2005
Utilizamos la funcionalidad del formato condicional de Excel para resaltar registros que
contengan la fecha seleccionada en un cuadro combinado.

Imagen del resaltador


La siguiente imágen explica la función de este truco.

Descargar archivo
Es un truco útil y fácil de emplear por su sencillez, tiene varias posibles aplicaciones.

Descargar Resaltador de registros Excel (zip)

Como hacer un termómetro en Excel


• José Skraviuk | 1/11/2005

Un interesante ejemplo de como combinar un gráfico con los controles de la hoja Excel.
El ejemplo no utiliza VBA.

Descargar archivo Excel (zip)


Ejemplo de carta Gantt en Excel
• José Skraviuk | 7/11/2005

Sobre Excel y diagramas Gantt


Un diagrama Gantt es una presentación gráfica con el objetivo de visualizar el tiempo
dedicado para varias actividades a lo largo de un tiempo.

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.

Un ejemplo de un diagrama Gantt en Excel

José Skraviuk nos manda esta plantilla de como preparar una carta Gantt en Excel.
Descargar archivo Excel/Carta Gantt (zip)

Introducción a VBA de Excel

VBA (Visual Basic for Applications) es un lenguaje de macros utilizado para programar
pequeñas aplicaciones dentro de un documento Excel, permitiendo la ampliación de la
funcionalidad del mismo.

¡Aprende a programar macros Excel!


VBA es una modalidad adaptada del conocido lenguage de programación Visual Basic,
incluida en la mayoría de las aplicaciones MS Office como Excel, Word y Access. Una
diferencia entre VBA y Visual Basic es que el programa VBA no se puede separar del
documento Excel, sino queda totalmente integrado dentro del libro de trabajo.
Esta introducción a Excel VBA te enseñará como empezar a desarrollar tus propias
macros Excel. VBA Excel y sus macros constituyen una ayuda potente para particulares
y pequeñas y medianas empresas.

Excel, y sobre todo la aplicación de macros VBA, mejora prácticamente cualquier


proceso de trabajo, desde sencillos cálulos sobre la economía familiar hasta complejos
modelos empresariales de Excel para crear informes, presupuestos y demás documentos
financieros.

¿Todo el mundo puede aprender a programar macros?


Si, sin duda. Mucha gente empieza por la grabación de macros, es decir grabar una
sequencia de comandos, para luego reutilizarla. Un buen ejemplo es "Pegar - Valores",
uno de los comandos VBA más utilizados. Luego se pasa a una programación VBA mas
compleja para buscar soluciones más íntegras.

Introducción y temas sobre macros VBA

Enlace Descripción
Qué es Excel VBA
El editor VBA de Excel

¿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).

¿Qué puedo hacer con VBA?

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.

¿Puedo acceder a VBA?


Sí. VBA está incluido en el Excel 'normal y corriente'. Se instala con Excel por defecto.
¿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.

El editor VBA de Excel


El editor VBA sirve para controlar y manipular tu código VBA, tanto de macros como
de completas aplicaciones VBA y add-ins. Todo parece mucho a Visual Basic, con la
diferencia de que VBA tiene otros objetos (hoja, celda etc)/métodos/eventos.

Contenido de un proyecto
En la columna de izquierda tenemos las piezas que forman parte del proyecto. En este
ejemplo tenemos dos libros abiertos:

Libro1.xls y Personal add-ins.xla (este segundo es un Add-in/Complemento).

Excel Objetos Este Libro y las hojas del libro


Módulos Contenedores para el código del proyecto
Formularios Tus propios formularios, con controles (botones, menús... + código
A la derecha vemos el marcado del Objetos/Módulos/Formularios.

Qué es una macro

Definiciónes

La definición más común de una macro es que se trata de un pequeño programa que
sirve para automatizar tareas repetitivas. Normalmente se guarda en el mismo libro
Excel en cual se va a ejecutar, pero se puede guardar en otros libros Exel, tanto como en
libros Add-in.

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 qué 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...
Cómo grabar una macro Excel VBA

Para aprender a programar VBA de Excel la mejor manera de empezar es


probablemente la grabación de macros en Excel. Es fácil grabar tus propias macros. Y
con un lígero retoque, salen todavía mejor. Para ejemplos de marcado, ver ejemplos de
macros útiles.

Preparar la grabación
Entra Herramientas - Macro - Grabar nueva macro.

Nombre de la Pon un nombre descriptivo, por ejemplo DosDecimales. Si quieres


macro espacio entre palabras, pon Dos_Decimales.
Método Si quieres que la macro se active desde el teclado, pon la
abreviado combinación, por ejemplo CTRL + L. Presionando MAYUSCULA te
(atajo) darán todavía más combinaciones.
O se guarda en Este Libro, o en Libro de Macros Personales. Si eliges
Guardar macro
Libro de Macros Personales, la macro va a estar disponible desde
en
cualquier libro de Excel.
Si quieres puedes poner un texto explicativo el cual se incluirá en el
Descripción
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.

Editar la macro grabada


Entra el VBA editor (Herramientas- Macro - Visual Basic Editor).

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.

Macros personales en Excel


¿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.

Sobre el libro Personal.xls


Es un libro Excel normal y corriente, pero con unas características especiales.

» Tiene el nombre de Personal.xls


» Contiene código VBA para tus macros, funciones etc.
» Se carga automáticamente al iniciar Excel
» Tiene el atributo Hidden (escondido) activado (Ventana - Mostrar)
» Se guarda en uno de estos sitios (normalmente)
c:\Program Files\Microsoft Office\Office\InicioXL (XLStart)

c:\Documents and Settings\ -user name-


\Application Data\Microsoft\Excel\InicioXL

¿Cómo se crea el libro Personal.xls?


Hay dos maneras de crear este libro.

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.

2. Dejar que Excel te ayude:

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.

Alternativas a macros personales


En vez de colocar tus macros en el Libro de Macros Personales, puedes crear un Add-in
(Complemento). Este es un libro [.xla] que se carga cada vez que abres Excel (igual que
el Libro de Macros Personales), que no está ocultado pero tampoco visible.

Ejemplos de macros Excel VBA


Ponemos a tú disposición una lista de ejemplos de macros personales de
Excel que pueden ser útiles en tu trabajo diario. Recordamos que las macros Excel VBA
ofrecen infinidad de posibilidades - trata de encontrar las tareas repititivas y de ahí crear
las macros.

Unos ejemplos de aplicaciones de macros Excel VBA: Cambiar propiedades de las


hojas Excel, suprimir filas, aplicar los formatos más comúnes... En poco tiempo tendrás
unas macros imprescindibles, y ya no podrás trabajar en Excel sin ellas.

Grabar y programar macros de Excel es una estupenda (posiblemente la mejor) manera


de empezar a aprender Visual Basic para Excel (VBA).

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

If Area.NumberFormat = "#,##0" Then

Area.NumberFormat = "#,##0.00"

Else

Selection.NumberFormat = "#,##0"
End If

End Sub

Suprimir filas vacías

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

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 Excel 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
-1,79769313486232 E308 hasta
Double 8 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?

El código saldrá más estructurado


Si no declaras un variable, no sabrás que tipo de datos contendrá.

Es más seguro - evitarás errores tipográficos


VBA te ayudará a poner los nombres correctos. Si no, un error tipográfico puede parar
el programa.
El código trabajará más eficaz
Variables no declaradas serán tratatos como Variants, las cuales ocupan mucha más
memoria.

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.

Poner nombres explicativos


Intenta poner nombres explicativos a las variables.

Dim strCodigoPostal as String

Dim datFechaRecogida as Date

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.

¿Donde poner las declaraciones?


VBA te deja declarar casi en cualquier sitio del código. No obstante, la posición puede
dar resultados distintos. Por eso es recomendable seguir unas normas.

Tipo de
Ubicación Accesible
declaración
Encima del procedimiento (antes Todos los procedimientos del
Dim
del primer Sub) módulo.
Antes de un procedimiento
Dim Ese procedimiento .
específico.
Dim Dentro de un procedimiento. Resto de ese procedimiento.
Encima del procedimiento (antes Todos los procedimientos (de
Public
del primer Sub) todos los módulos).
• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• VB

VBA bucles Intro

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.

Hay dos tipos generales de bucles:

Bucles Do... Loop


Repite las instrucciones mientras/hasta etc. una condición es TRUE/VERDADERO.

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.

Bucles For... Next


Repite las instrucciones un número especificado de veces.

For i... Next


Repite las instrucciones i veces.
For each... Next
Repite las instrucciones según el número de objetos especificados, por ejemplo For
each cell de un rango en Excel.

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

Do While Cells(i, 2) <> ""


f Cells(i, 1) >= 1.5 Then Exit Do
i = i + 1
Loop

MsgBox "El valor se encontró en fila no. " & i

i = la línea donde empezamos el bucle. Ponemos i = 1. Cells(i, 2) significará línea 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).

Al final devolvemos un Messagebox para presentar el resultado.

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.

For i... Next

Esta instrucción se repite el número de veces (i) que tú indicas.

Ejemplo
Creamos un bucle sencillo. Queremos que se repita 4 veces, y que la variable intValor
(al empezar = 1) se incremente con 2 cada vuelta. Este nos da el resultado intValor = 9
(1+2+2+2+2).

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

• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• VBA código
• Info
• Enl

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))

For Each Cell In rngArea


If Cell = "Alexis" Then
MsgBox "¡Encontró Alexis"
Exit For
End If
Next

• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VB
• VBA de Excel - ejemplos prácticos de
macros
• Una de las utilidades principales de VBA es la de automatizar tareas cotidianas,
como por ejemplo crear un atajo (del teclado) para la función de 'Pegar como
valor' en Excel. Estas pequeñas aplicaciones suelen denominarse 'macros', pero
Excel VBA también sirve para la programación de aplicaciones más complejas,
como servicios de bases de datos y la manipulación de archivos.
• Ejemplos de macros VBA de Excel
• Esta lista de ejemplos VBA de Excel recopila algunas pequeñas aplicaciones de
código VBA. Recuerda - haz una copia de seguridad antes de aplicar código
VBA a tus archivos.

Excel y otros programas


Método para abrir-copiar-modificar-cerrar Excel desde
Abrir Excel desde VB
VB.
Marcador de teléfono Cómo marcar el teléfono desde Excel (API).
Aplicamos la función 'Create Object' de VBA para
Importar texto de Word a Excel
importar textos desde Word.
Macro para pegar celdas Excel
Mandar celdas Excel a una tabla nuevo de Word.
en tabla Word
Importar celdas de Excel a ADO de Excel VBA nos deja conectar con otro libro
Excel Excel para importar datos.
Excel y bases de datos
Access a Excel (ADO) Importar (ADO) una tabla Access a Excel.
Crear/modificar archivo de texto Código VBA - archivo de texto como base de datos.
Importar dBase IV a Excel Importar una base de datos dBase IV a una hoja Excel.
Abrir archivo de texto en Excel Ejemplo VBA cómo abrir archivos planos en Excel.
Excel y Outlook
Excel por e-mail Mandar hoja Excel por e-mail.
Importar datos de Outlook a
Importar datos de Outlook a Excel. (VBA)
Excel
Libros y hojas 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.
Método VBA Excel para repasar varios archivos de
Repasar archivos/carpeta
una carpeta.

Colores y filtros en Excel


Colores Colores y Excel VBA, breve repaso.
Colorear celdas al hacer click Un evento de la hoja para colorear celdas Excel
seleccionadas.
Filtrar con colores Truco para añadir colores al Autofiltro de Excel.
Devolver el rango visible de la hoja Excel de la
Scrollrow - el rango visible
pantalla.
Vínculos y acceso en Excel
Restringir acceso a una o varias hojas de un libro
Acceso a hojas
Excel.
Enlaces a todas las hojas Crear lista de enlaces a cada hoja del libro Excel.
Crear archivos de cada hoja Crear archivo independiente de cada hoja Excel.
Eliminar vínculos Eliminar vínculos externos/a otras hojas.
Información del sistema o usuario
El objeto Application de Excel VBA nos da
Objeto 'Application'
información.
País y idiomas del usuario Ejemplo VBA: Devolver el país del usuario.
Funcionalidad añadida
El diálogo 'Abrir archivo' Abrir otro libro Excel a través del diálogo VBA 'Abrir'.
El messagebox de VBA presenta
Ejemplos del messagebox
información/interactua.
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.
Evento Change para simular una casilla de
Casilla de verificacion
verificación.
Emplear el evento Change para proporcionar ayuda al
Sistema de ayuda
usuario.
Temporizador El temporizador de Excel.
Método WAIT Hacer que el código VBA pare durante un tiempo.
Imprimir
Incluir función VBA Excel para Funciónes para que el usuario pueda imprimir las hojas
imprimir Excel cómodamente.
Excel y VBA
Copiar/exportar módulos VBA Ejemplo VBA para exportar módulos.
Funciones
Calcular dígitos de control Comprobar una cuenta bancaria española.
Utilizar la función INSTR para filtrar una lista en
Buscar INSTR
Excel.
Sumar un rango variable Aplicar fórmulas de Excel en VBA.

Objecto Application de Excel VBA


El objeto Application de VBA nos da información del usuario/máquina. En este
artículo presentaremos unas aplicaciones del un objeto muy básico de Excel/VBA:
Application. Este representa todo el conjunto del programa Excel y sus libros de trabajo.
Unos ejemplos de propiedades del objeto Application
El objeto Application tiene muchas propiedades. Hay unas que pueden ser interesantes
para el programador de macros VBA de Excel.

Objeto Propiedad Devuelve


Application. UserName Nombre del usuario
OrganizationName Nombre de la empresa
OperatingSystem Sistema operativo
Version Versión de MS Excel
ProductCode Código de MS Excel
StandardFont Fuente por defecto
StandardFontSize Tamaño fuente por defecto
DecimalSeparator Carácter separador de miles
ActivePrinter Impresora por defecto
DefaultFilePath Ruta de acceso por defecto
UserLibraryPath Ruta a carpeta Add-ins

Sobre la versión de MS Excel arriba:

Nº Versión
12 Excel 2007
11 Excel 2003
Excel 2002
10
("XP")
9 Excel 2000
8 Excel 97
7 Excel 95

Algunos ejemplos prácticos del objeto Application de


Excel
Presentar la impresora activa del usuario

Para presentar la impresora activa del usuario, en una caja de diálogo, pondríamos

Sub Devolver ImpresoraActiva()

Dim strImpresoraActiva as String


strImpresoraActiva = Application.ActivePrinter

Msgbox strImpresoraActiva

End sub

o todavía más fácil:


Sub Devolver ImpresoraActiva()

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

'devolver datos del objeto 'Application'

strDataArray(0) = Application.UserName

strDataArray(1) = Application.OrganizationName

strDataArray(2) = Application.OperatingSystem

strDataArray(3) = Application.Version

strDataArray(4) = Application.ProductCode

strDataArray(5) = Application.StandardFont

strDataArray(6) = Application.StandardFontSize

strDataArray(7) = Application.DecimalSeparator

strDataArray(8) = Application.ActivePrinter

strDataArray(9) = Application.DefaultFilePath

strDataArray(10) = Application.UserLibraryPath

'presentar los datos en celdas D3...

x = 0
For i = 3 To 13

Cells(i, 4) = strDataArray(x)

x = x + 1

Next i

End Sub

'-----------------------------------------------------

Sub SuprimirDatosEnceldas()

'suprimir datos antiguos

Range(Cells(3, 4), Cells(13, 4)).ClearContents

End Sub

Determinar idioma del usuario desde


Excel VBA
[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)

If CodigoPais = 1 Then MsgBox ("Hello")

ElseIf CodigoPais = 34 Then MsgBox ("Hola")

End If

End Sub

• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• VBA código
• Info
• Enlaces
• XHTML
• CSS

© 2003-2008 xltoday.net. Todos los derechos reservados.

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

Abrir libro Excel (ruta fija)

Workbooks.Open FileName:="C:\Trabajo\Informe.xls"

Abrir libro Excel (diálogo)

Msg = MsgBox("Elija archivo para abrir.", vbOKOnly, (""))

strArchivo = Application.GetOpenFilename

On Error GoTo 99

Workbooks.OpenText Filename:=strArchivo

If strArchivo = "" Then Exit Sub

strArchivo = ActiveWindow.Caption

99:

Exit sub

Devolver nombre del libro Excel

strNombre = ActiveSheet.Parent.FullName

MsgBox ActiveWorkbook.FullName

VBA y hojas Excel


Nombre de la hoja (variable)

'asigna nombre variable a la hoja a variable

strHoja = ActiveWindow.Caption

Windows(strHoja).Activate 'para activar el libro del nombre asignado

Insertar hoja nueva (elegir posición)

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

Scrollrow - 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 resultado será algo como

El código

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim strRuta As String

Dim intRowActual, intColumnActual As Double

Dim intRow, intColumn As Double

'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

'añadimos imagen al comentario

Cells(intRow, intColumn).Comment.Shape.Select True

Selection.ShapeRange.Fill.UserPicture strRuta

'aparcamos en celda actual

Cells(intRowActual, intColumnActual).Select

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.

Eventos empleados para la protección


Para esto vamos a utilizar el evento Workbook_SheetActivate, un evento que salta cada
vez que alguna hoja se active. Es decir, el evento se activará cuando el usuario hace
click sobre una etiqueta de una hoja. Si la hoja forma parte de las restringidas, Excel
pedirá palabra de paso. Al introducir una palabra de paso erronea, se queda en la hoja
anterior.

Grado de seguridad de la macro para proteger hojas


Cualquier persona puede entrar al código VBA para ver la palabra de paso. Por eso
debes proteger el codigo (VBA editor - Click derecho sobre EsteLibro - Propiedades).

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).

Código VBA para proteger hojas Excel

Dim strStartHoja As String

Dim strSegundaHoja As String

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Dim z As Integer

Dim i As Integer

Dim x As Boolean

Dim varHoja As Variant

Dim varPaso As Variant

Dim varInput As Variant

'preparar modelo [admin. input]

varHoja = Array("Sheet2", "Sheet3") 'las hojas a proteger...


varPaso = "gofio" 'palabra de paso... [letras/números]

'desconectar otros Events (evitar un tipo de bucle)

Application.EnableEvents = False

'comprobar hojas

strSegundaHoja = Sh.Name

For i = LBound(varHoja) To UBound(varHoja)

If varHoja(i) = strSegundaHoja Then x = True

Next i

If x = False Then GoTo 99

'ocultar la hoja temporalmente

z = ActiveWindow.Index

Windows(z).Visible = False

'comparar palabra de paso

varInput = InputBox("Palabra de paso:")

If varInput <> varPaso Then Sheets(strStartHoja).Select

'volver a mostrar la hoja

Windows(z).Visible = True

99:

'conectar Events

Application.EnableEvents = True
End Sub

'*************************************************

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

'recordar hoja inicial

strStartHoja = Sh.Name

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()

Dim wrbLibro As Workbook


Dim wrsHojaActiva As Worksheet, wsHoja As Worksheet

Dim intFila, intColumna As Integer

Set wrbLibro = ActiveWorkbook

Set wrsHojaActiva = ActiveSheet

'en que fila/columna empezar la lista

intFila = 4

intColumna = 1

'el bucle repasa todas las hojas

For Each wsHoja In wrbLibro.Worksheets

'para excluir hoja de los links

If wsHoja.Name = "Hoja4" Then GoTo ProxHoja

'crear links

If wsHoja.Name <> wrsHojaActiva.Name Then

wrsHojaActiva.HyperLinks.Add wrsHojaActiva.Cells(intFila, intColumna),


_

"", SubAddress:="'" & wsHoja.Name & "'!A1", _>

TextToDisplay:=wsHoja.Name

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".

Macro VBA para eliminar vínculos Excel


Con esta macro podrás eliminar vínculos a otras hojas/libros.

» Elimina vínculos a otras hojas/libros


» Referencias dentro de la hoja se mantienen.
» Los vínculos se convierten en valores.
» Antes de todo, ¡recuerda hacer una copia de seguridad!

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

'(0) Un pequeño control

varMsg = MsgBox("¿Ha guardado una copia de seguridad?", vbYesNo)

If varMsg = 7 Then Exit Sub

'(1) Quitar vínculos externos (a otros libros)

varLink = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)

If Not IsEmpty(varLink) Then

i = 1

Do Until IsEmpty(varLink)

On Error GoTo 9

ActiveWorkbook.BreakLink Name:=varLink(i), _

Type:=xlLinkTypeExcelLinks

i = i + 1

Loop

End If

9:

'(2) Quitar vínculos internos (a otras hojas)

On Error Resume Next

For Each wrsHoja In ActiveWorkbook.Worksheets

For Each objCelda In


wrsHoja.UsedRange.SpecialCells(xlCellTypeFormulas, 23)

If InStr(objCelda.Formula, "!") Then objCelda.Value = objCelda.Value

Next
Next

End Sub

Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".

Macro VBA para crear archivos de cada


hoja Excel
Con un mínimo de código vamos a crear archivos independientes de las
hojas de un libro. Un ejemplo sería un libro con 124 hojas, una hoja por empleado, y
ahora queremos separar las hojas de cada colega y crear libros independientes.

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

'bucle todas hojas

For i = 1 To Sheets.Count

'copia la hoja a libro nuevo

Sheets(i).Activate

strHoja = ActiveCell.Worksheet.Name

Sheets(strHoja).Copy

'donde guardar los archivos creados

strRuta = "C:\excel\vba\ejemplos"

'guarda el libro nuevo

ActiveWorkbook.SaveAs Filename:=strRuta & "\" & strHoja, _

FileFormat:=xlNormal, Password:="", WriteResPassword:="", _

ReadOnlyRecommended:=False, CreateBackup:=False

ActiveWindow.Close Savechanges:=True

'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).

Columnas de Excel y VBA


Presentamos unas macros para trabajar con columnas Excel desde Excel VBA.

Encontrar última columna (buscar al revés)

Sub EncontrarUltimaColumna()

Dim intUltimaCol As Integer

If WorksheetFunction.CountA(Cells) > 0 Then

intUltimaCol = Cells.Find(What:="*", After:=[A1], _

SearchOrder:=xlByColumns, _

SearchDirection:=xlPrevious).Column

MsgBox intUltimaCol

End If

End Sub

Encontrar última columna (en fila especificada)

Sub EncontrarUltimaColumna()

Dim intUltimaCol As Range


If WorksheetFunction.CountA(Rows(1)) > 0 Then

Set intUltimaCol = Range("IV1").End(xlToLeft)

MsgBox intUltimaCol.Address

End If

End Sub

Suprimir columnas vacías en el rango

Sub SuprimirColumnas()

Dim cCount As Integer, c As Integer

Dim DeleteRange as Range

DeleteRange =("A1:B10")

If DeleteRange Is Nothing Then Exit Sub

'Ejemplo: DeleteEmptyColumns Range("A1:Z1")

If DeleteRange.Areas.Count > 1 Then Exit Sub

With DeleteRange

cCount = .Columns.Count

For c = cCount To 1 Step -1

If Application.CountA(.Columns(c)) = 0 _

Then .Columns(c).EntireColumn.Delete

Next c

End With

End Sub
Suprimir cada n-columnas

Sub SuprimirColumnas()

Dim rCount As Long, r As Long

Dim DeleteRange as range

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

Marcar encabezado de columnas filtradas


Este ejemplo Excel VBA surge en base a que si uno filtra con mucho criterios, pasa que
aveces nos perdemos que columnas tenemos filtrado.
En este caso se utiliza una macro, para que resalte el encabezado de las columnas
filtradas.

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)

Contenedor del código


El código debe ir en el módulo VBA correspondiente a la hoja para filtrar, por utilizar el
suceso Worksheet_Calculate(). Ver ejemplo.

El código

Option Explicit

'JOSE SKRAVIUK

'ayudaexcel@ yahoo.com.ar

Private Sub Worksheet_Calculate()


Dim af As AutoFilter

Dim fFilter As Filter

Dim iFilterCount As Integer

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

• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• Filas Excel - macros VBA

• 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)


• Dim lngUltimaCelda As Long
• If WorksheetFunction.CountA(Cells) > 0 Then
• lngUltimaCelda = Cells.Find(What:="*", After:=[A1], _
• SearchOrder:=xlByRows, _
• SearchDirection:=xlPrevious).Row
• MsgBox lngUltimaCelda
• End If
• Encontrar última fila (en columna especificada)


• Dim intUltimaFila As Range

• If WorksheetFunction.CountA(Columns(1)) > 0 Then
• Set intUltimaFila = Range("65536").End(xlUp)
• MsgBox intUltimaFila.Address
• End If
• Suprimir filas vacías


• 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


• Dim intNumDeFilas As Long

• Selection.SpecialCells(xlCellTypeLastCell).Select
• intNumDeFilas = Selection.Row
• For i = 1 To intNumDeFilas
• If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
• Rows(i).Delete
• End If
• Next
• Suprimir filas vacías


• intUltimaFila = _
• ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
• For r = intUltimaFila To 1 Step -1
• If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
• Next r
• Suprimir filas por condición


• Dim rngString As Range

• Do
• Set rngString = Cells.Find("Aglis", MatchCase:=False, _
• LookAt:=xlPart, LookIn:=xlValues)
• If Not rngString Is Nothing Then
• rngString.EntireRow.Delete
• End If
• Loop Until rngString Is Nothing
• Suprimir filas vacías por dos condiciónes X, Y


• For i = intUltimaFila To 1 Step -1
• Let strTest= Application.Cells(i, 2)
• If strTest <> "X" And strTest <> "Y" Then Rows(i).Delete
• Next i

El temporizador de Excel VBA


Si queremos que una instrucción se haga automáticamente, a intervalos fijos,
podemos recurrir al método Application.OnTime.

Procedimientos
Vamos a necesitar tres sencillas macros.
1. StartTemporizador - Iniciar el temporizador
2. Tu_Sub - Cualquier instrucción
3. StopTemporizador - Cerrar el temporizador

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.

Public datHora As Date

Public Const conIntervalo = 60 'un minuto

Public Const conRunMacro = "Tu_Sub" 'tu proced.

Iniciar temporizador
La primera macro inicia el temporizador.

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.

Public datHora As Date

Public Const conIntervalo = 60 'un minuto

Public Const conRunMacro = "Tu_Sub" 'tu proced.

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

WAIT - 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")
Es decir la hora actual más 4 segundos.

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'.

Private Sub Workbook_Open()

frmMensaje.Show

End Sub

Crear una barra de progreso en Excel


• José Skraviuk | 13/12/2005

Un ejemplo de una macro VBA de como crear una barra de progreso (progress bar) para
incluir en nuestras aplicaciones y plantillas Excel.
De esta forma podemos añadir un medidor de progreso gráfico a la barra de estado de
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
Sobre el método de Excel VBA "OnTime"
El método OnTime de Excel ejecuta una macro en una hora designada o en intervalos
fijos.

Código VBA empleado para el método OnTime

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 Excel y VBA


Excel pone a disposición un montón de formatos. Abajo presentamos como
modificar algunos de ellos a través de macros Excel VBA.

Redondear celdas

Set Area = Selection

For Each Cell In Area

z = Round(Cell, 2)

Cell.Value = z

Cell.NumberFormat = "#,##0.00"

Next Cell

Formatear fuente

Cells.Select

With Selection.Font

.Name = "MS Sans Serif"

.Size = 10

End With

Líneas de división

ActiveWindow.DisplayGridlines = False

Indice de colores
ActiveWorkbook.Colors(44) = RGB(236, 235, 194) 'verde

Colorear rango

Range("A1:B10").Interior.ColorIndex = 44

Cambiar entre estilos A1 / RC

Application.ReferenceStyle = xlA1Application.ReferenceStyle = xlR1C1

Excel VBA y la paleta de colores


Excel emplea una paleta de 56 colores predefinidos. Puedes cambiar estos colores
desde Herramientas - Opciones - Color o desde código VBA. Abajo presentamos unos
ejemplos de código VBA para modificar la paleta de colores del libro Excel.

Por desgracia, a muchos de nosotros los colores de la hoja Excel 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.

Excel y 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).

KfmDesign presenta una buena página de Colores RGB y HEX.

Para cambiar entre RGB y HEX necesitamos un Conversor RGB <> HEX.

Cambiar colores de la paleta Excel


Entonces, ¿qué podemos hacer para que Excel siempre tenga los colores definidos por
ti? Una solución sería crear una plantilla con nuestros formatos. Excel llamará esta
plantilla al crear un libro nuevo.
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.

ActiveWorkbook.Colors(40) = RGB(234, 234, 234)

ActiveWorkbook.Colors(41) = RGB(236, 235, 194)

Código VBA para cambiar colores de celdas Excel


Para cambiar los colores aplicados a una celda ejecutamos una de las siguientes
instrucciones.

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 Excel


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 del libro Excel actual


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 en Excel VBA


Podemos colorear celdas por condiciones, evaluando una cadena de texto, por ejemplo.

For Each Item In Intersect(ActiveSheet.UsedRange, Selection.Cells)

If Item.Text = "ColaCao" Then

Item.Interior.ColorIndex = 44

End If

Next

Buscar fragmento de texto en una lista


La función INSTR nos permite buscar un fragmento de texto en una lista de
cadenas de texto. Nos devuelve la posición dentro de la cadena. Esta cifra es clave: 0 =
no coincide, >0 = sí que coincide.

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 celda G2 introducimos el criterio.

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

'quitar resultados anteriores

Range("G5:H4000").ClearContents

'columna + fila donde empezar/terminar búsqueda

lngColumna = 2

lngFila = 5

lngUltimaFila = Columns(lngColumna). _

Range("A65536").End(xlUp).Row

'columna + fila donde empezar a pegar resultados

lngPegarColumna = 6

lngPegarFila = 5

'objeto a buscar

strObjetoBuscar = Range("G2").Text

If strObjetoBuscar = "" Then GoTo 99

'minúsculas

strObjetoBuscar = LCase(strObjetoBuscar)

'bucle: realizar búsqueda

For n = lngFila To lngUltimaFila

'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.

Utilizar funciones Excel en VBA


Tenemos un rango varSuma, el rango a sumar. Para sumar las celdas de este rango
tenemos que llamar a la función SUM 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.

Escribir la suma (en celda)

'el rango a sumar

varSuma = Range(Cells(8, 3), Cells(13, 3))

'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.

Hay tres modos:

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.

Ejemplo: Open strArchivoTexto For Output As #f.

Append

Abrir (o crear) para escribir (seguir por la última línea).

Ejemplo: Open strArchivoTexto For Append As #f.

Input

Abrir para lectura (a Excel).

Ejemplo: Open strArchivoTexto For Input As #f.


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.

Ejemplo: Print #f, "Fecha de hoy: " & Date

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 ';'.

Escribir archivo Ascii - OUTPUT

Sub Crear_Escribir_ArchivoAscii()

Dim strNombreArchivo, strRuta, strArchivoTexto As String

Dim f As Integer

'nombre y ruta del archivo de texto

strNombreArchivo = "MiArchivoAscii.txt"

strRuta = "C:\"

strArchivoTexto = strRuta & strNombreArchivo

'abrimos el archivo para escribir

f = FreeFile

Open strArchivoTexto For Output As #f


'escribimos al archivo

Print #f, "Fecha de hoy: " & Date

Print #f, "Usuario: " & Application.UserName

'cerramos el archivo de texto

Close f

End Sub

Escribir archivo Ascii - APPEND

Sub Crear_Escribir_ArchivoAscii()

Dim strNombreArchivo, strRuta, strArchivoTexto As String

Dim f As Integer

'nombre y ruta del archivo de texto

strNombreArchivo = "MiArchivoAscii.txt"

strRuta = "C:\"

strArchivoTexto = strRuta & strNombreArchivo

'abrimos el archivo para escribir

f = FreeFile

Open strArchivoTexto For Append As #f

'escribimos al archivo
Print #f, "Fecha de hoy: " & Date

Print #f, "Usuario: " & Application.UserName

'cerramos el archivo de texto

Close f

End Sub

Leer archivo Ascii - INPUT

Sub Leer_ArchivoAscii()

Dim strNombreArchivo, strRuta, strArchivoTexto As String

Dim f, i As Integer

Dim strTexto As String

'nombre y ruta del archivo de texto

strNombreArchivo = "MiArchivoAscii.txt"

strRuta = "C:\"

strArchivoTexto = strRuta & strNombreArchivo

'abrimos el archivo para lectura

f = FreeFile

Open strArchivoTexto For Input As #f

'leemos el archivo de texto a columna de Excel

i = 1

While Not EOF(f)


Line Input #f, strTexto

Cells(i, 1) = strTexto

i = i + 1

Wend

'cerramos el archivo de texto

Close f

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

• Mostrar información al usuario


• Recibir información del usuario
• Devolver información del usuario

Construcción sintáctica de la messagebox

Msgbox "Mensaje", Botones/íconos, "Título"

o en el caso de devolver información

Respuesta = Msgbox("Mensaje", _

Botones/íconos, "Título")

Nota los paréntesis en la segunda construcción.

Mensaje
Cualquier tipo de texto. Para crear un salto de línea empleamos el carácter vbCrLf.
Actualización terminada:" & vbCrLf & _

"- Importación de datos de venta.

Botones

Si quieres puedes añadir cualquier de estos cuatro botones (si no pones nada Excel te
pondrá vbOkOnly por defecto).

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

Calcular los Dígitos de control desde


Excel VBA
En este ejemplo presentamos un ejemplo de marcado VBA para calcular los
dígitos de control de una cuenta bancaria española.

¿Qué son los dígitos de control?


Las cuentas bancarias españolas consisten de 4 grupos de dígitos. Los dígitos de control
verifican los códigos de Entidad y Oficina (el primer dígito), y el Número de Cuenta (el
segundo dígito). El algoritmo para calcular los dígitos de control se define en Norma
bancaria 34 de AEB (Asociación Española de Banca).

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

En el ejemplo arriba, los dígitos de control serían 81.

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()

Dim Bank As String

Dim Office As String

Dim DC As String

Dim Account As String

Dim BankOffice As String

Dim Valor1, Valor2, Valor3, Valor4, Valor5

DIm Valor6, Valor7, Valor8, Valor9, Valor10

Dim TestValue1 As Integer


Dim TestValue2 As Integer

Dim TestValueDC As Integer

'---------------------------------------------------

'recoger el número de cuenta

Bank = Range("B3").Text

Office = Range("C3").Text

DC = Range("D3").Text

Account = Range("E3").Text

BankOffice = Bank & Office

'---------------------------------------------------

'evaluar DC (1)

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)

TestValue1 = Valor1 + Valor2 + Valor3 + Valor4 + _

Valor5 + Valor6 + Valor7 + Valor8

TestValue1 = (TestValue1 Mod 11)

TestValue1 = 11 - TestValue1

If TestValue1 = 10 Then TestValue1 = 1

If TestValue1 = 11 Then TestValue1 = 0


'---------------------------------------------------

'evaluar DC (2)

Valor1 = (Mid(Account, 1, 1) * 1)

Valor2 = (Mid(Account, 2, 1) * 2)

Valor3 = (Mid(Account, 3, 1) * 4)

Valor4 = (Mid(Account, 4, 1) * 8)

Valor5 = (Mid(Account, 5, 1) * 5)

Valor6 = (Mid(Account, 6, 1) * 10)

Valor7 = (Mid(Account, 7, 1) * 9)

Valor8 = (Mid(Account, 8, 1) * 7)

Valor9 = (Mid(Account, 9, 1) * 3)

Valor10 = (Mid(Account, 10, 1) * 6)

TestValue2 = Valor1 + Valor2 + Valor3 + Valor4 + Valor5 + _

Valor6 + Valor7 + Valor8 + Valor9 + Valor10

TestValue2 = (TestValue2 Mod 11)

TestValue2 = 11 - TestValue2

If TestValue2 = 10 Then TestValue2 = 1

If TestValue2 = 11 Then TestValue2 = 0

'---------------------------------------------------

'reconstituir las dos cifras del DC

TestValueDC = TestValue1 & TestValue2

'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".

Marcar el teléfono desde Excel


• José Skraviuk | 1/11/2005

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).

PhoneCall "0" + strNumero, strNombre

Si tienes linea diecta, debes quitar "0".

PhoneCall strNumero, strNombre

El código

'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

Private Sub PhoneCall(sNumber As String, sName As String)

Dim lRetVal As Long

lRetVal = tapiRequestMakeCall(Trim$(sNumber), _

"Marcando", Trim$(sName), "")

If lRetVal <> 0 Then

End If

End Sub

Public Sub MarcarTelefono()

Dim strNumero As String

Dim strNombre As String

strNombre = ActiveCell.Value

strNumero = ActiveCell.Offset(0, 1).Value

PhoneCall "0" + strNumero, strNombre

End Sub

• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas

Excel VBA - Crear un sistema de ayuda


• José Skraviuk | 12/11/2005

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

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

If ActiveCell = Range("B5") Then

Range("ayuda") = "Ud ha seleccionado la OPCION1, permite ver el


ejemplo nº1"

Else

Range("ayuda") = ""
If ActiveCell = Range("D5") Then

Range("ayuda") = "Ud ha seleccionado la OPCION2, permite ver el


ejemplo nº2"

Else

Range("ayuda") = ""

End If

End If

End Sub

Casilla de Verificación (evento Change)


• José Skraviuk | 11/30/2005

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

El código debe escribirse en la misma hoja Excel, ver imagen.

'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

Resumen de este ejemplo de "Explorador de informes"


Este ejemplo nos nuestra, de cómo armar un explorador de informes en Excel,
manejándonos desde un Panel Principal. Esto nos permite dar una mejor estética a
cualquier aplicación desarrollada en Excel.

La importancia del formato Excel de presentación


Como hemos ido comentando en otros ejemplos de Excel y VBA de este sitio, la
presentación de los libros Excel es algo muy importante, sobre todo si trata de informes
para distribuir.

Captura de pantalla de esta plantilla Excel

Instrucciones
Encontrarás un ejemplo real del
Explorador de archivos Excel aquí
Para ver el código utilizado, combine las siguientes Teclas:ALT + F11.

Importar tabla Access a Excel

Aquí explicamos cómo importar una tabla de una base de datos Access, a una hoja
Excel.

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

'elegir uno de estas dos rutas al archivo Access

strDB = ThisWorkbook.Path & "\" & "db.mdb"

'strDB = "C:\vba\db.mdb" 'si en otra carpeta

'nombre de la tabla del archivo Access

strTabla = "salarios_2003"

'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 datos a la hoja

ActiveSheet.Cells(2, 1).CopyFromRecordset recSet


'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

Importar datos de Outlook a Excel


Con VBA de Excel podemos contactar con Outlook para devolver datos. En este
ejemplo vamos a importar algunos datos de los Contactos.

Objetos utilizados
Para contactar con Outlook desde Excel podemos utilizar el objeto GetNameSpace de la
MAPI - Messaging Application Programming Interface.

Luego, el método GetDefaultFolder nos deja acceder a las carpetas de Outlook, por
ejemplo el de los Contactos.

Parámetro Carpeta
3 Deleted Items (Elementos elimindos)
4 Outbox (Bandeja de salida)
5 Sent Items (Elementos enviados)
6 Inbox (Bandeja de entrada)
9 Calendar (Calendario)
10 Contacts (Contactos)
11 Journal (Diario)
12 Notes (Notas)
13 Tasks (Tareas)
16 Drafts (Borrador)
El código

Sub ImportarContactos()

Dim olApp As Outlook.Application

Dim olContacts As Outlook.MAPIFolder

Dim olContact As Outlook.ContactItem

Dim i As Integer

Set olApp = New Outlook.Application

Set olContacts =
olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)

'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)"

'importar contact items

For i = 2 To olContacts.Items.Count

If TypeOf olContacts.Items.Item(i) Is _Outlook.ContactItem Then

Set olContact = olContacts.Items.Item(i)

Cells(i, 1) = olContact.FullName

Cells(i, 2) = olContact.Email1Address

Cells(i, 3) = olContact.JobTitle

Cells(i, 4) = olContact.CompanyName

Cells(i, 5) = olContact.HomeTelephoneNumber

Cells(i, 6) = olContact.MobileTelephoneNumber

Cells(i, 7) = olContact.BusinessTelephoneNumber

Cells(i, 8) = olContact.BusinessFaxNumber

Cells(i, 9) = olContact.BusinessAddressStreet

Cells(i, 10) = olContact.BusinessAddressPostalCode

Cells(i, 11) = olContact.BusinessAddressCity

Cells(i, 12) = olContact.BusinessAddressCountry

Cells(i, 13) = olContact.HomeAddressStreet

Cells(i, 14) = olContact.HomeAddressPostalCode

Cells(i, 15) = olContact.HomeAddressCity

Cells(i, 16) = olContact.HomeAddressCountry

End If

Next

'eliminar variables de los objetos


Set olContact = Nothing

Set olContacts = Nothing

Set olApp = Nothing

'ordenar lista por Nombre

Cells.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess

End Sub

Enviar hoja Excel por correo electrónico


(Outlook etc.)
• 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

strdate = Format(Now, "dd-mm-yy h-mm-ss")


strEmail = "aaa.bbb@ccc.com"

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

VBA: Consultas SQL - Tablas


CREATE
Para crear nuevas tablas y campos.
CREATE TABLE nombre_tabla
(nombre_columna1 datatype,
nombre_columna2 datatype, ...)

Ejemplo

CREATE TABLE Nombres


(Apellido varchar (40), Nombre varchar(40))

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.

DROP TABLE nombre_tabla

DROP DATABASE nombre_basededatos

TRUNCATE
Para suprimir el contenido una tabla (y no toda la tabla en si). Puede ser muy útil de vez
en cuando.

TRUNCATE TABLE nombre_tabla

ALTER
Para añadir/suprimir columnas en una base de datos.

ALTER TABLE nombre_tabla


ADD nombre_columna datatype

ALTER TABLE nombre_tabla


DROP nombre_columna

Ejemplo

ALTER TABLE Nombre


ADD Dirección varchar(40)
ALTER TABLE Nombre
DROP Apellido

VBA y consultas SQL - Registros

SELECT
Para seleccionar (devolver) datos de la base de datos.

SELECT nombre_columna(s) FROM nombre_tabla

SELECT * FROM nombre_tabla

SELECT DISTINCT nombre_columna(s FROM nombre_tabla

INSERT
Para grabar nuevos registros en la base de datos.

INSERT INTO nombre_tabla VALUES (valor1, valor2, valor3.

Para insertar datos en una columna escpecífica:

INSERT INTO nombre_tabla (columna1, columna2...)


VALUES (valor1, valor2, valor3)

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.

DELETE FROM nombre_tabla WHERE nombre_columna = un valor

Para suprimir todas las filas de una tabla:

DELETE FROM nombre_tabla


o

DELETE * FROM nombre_tabla

VBA y SQL: Condiciones

FROM
Para especificar tabla de origen. Utilizado con el comando SELECT.

SELECT DISTINCT nombre_columna(s)


FROM nombre_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.

Si la condición es de texto, hay que poner apóstrofes ('López'), si es numérico no se


pone.

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.
SELECT nombre_columna1, SUM(nombre_columna2)
FROM nombre_tabla
GROUP BY nombre_columna1

ORDER BY
Para ordenar los registros.

SELECT nombre_columna1, nombre_columna2, nombre_columna3


FROM nombre_tabla
ORDER BY nombre_columna1, nombre_columna3

VBA y programación SQL - Operadores

Operador Descripció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.

VBA y consultas SQL - Funciones


AVG
Devuelve el promedio de una columna.

SELECT AVG (nombre_columna)


FROM nombre_tabla

También se puede aplicar condiciones al cálculo.

SELECT AVG (Salario)


FROM Registro_salarios
WHERE Salario > 1500

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

También se puede aplicar condiciones al cálculo.

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

Excel y consultas SQL - Variables SQL

Algunas veces querrás hacer consultas SQL y poner una variable como condición. Esto
se puede hacer perfectamente, solo hay que tener un poco de cuidado al formular la
ortografía de la consulta.

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

Ahora incluimos la variable en la consulta SQL.


strSQL = "SELECT Salario FROM tabla_Salarios WHERE Empleado LIKE '" &
Empleado & "' "

Info sobre el sitio


Lo más actual
Todo el sitio fue reescrito en XHTML en julio 2005, para cumplir con los Estándares
Web, y XHTML de W3C.

Contactar
Pueden contactar con nosotros en el siguiente buzón: info@xltoday.net

La idea - un sitio sobre Excel VBA


Este site es el fruto de mi interés en el programa Excel, una aplicación 'ofimática'
inagotable. Siempre encontrarás nuevas aplicaciones y soluciones. Posiblemente uno de
los mejores programas escritos jamás.

Hay bastante poco material en castellano sobre Excel y VBA en la red. Espero que este
sitio pueda ser útil para todo usuario Excel, sea cual sea su profesión. Las soluciones
Excel sirven para todo.

Para mi este sitio ha servido para documentar algunas soluciones desarrolladas, y


actualmente me sirve como una pequeña 'biblioteca VBA'. Muy a menudo entro para
buscar algún trocito de código. Todo para no tener que reinventar la rueda...

La construcción

(X)HTML

El sitio está escrito en XHTML, una variedad más moderna de HTML. De está manera
las páginas funcionarán en la mayoría de los navegadores modernos.

CSS

CSS (Cascading Style Sheets) acompaña el XHTML. CSS sirve para hacer una división
entre contenido y diseño (además, esto es una de las ideas fundamentales de XML).

Estándares Web

La combinación XHTML + CSS forma parte de los Estándares Web, una iniciativa de
particulares para estandardizar la producción web. Todo para mejorar para el visitante
(funcionar en distintos navegadores, cargar más rápido, navegación intuitiva...).
Este sitio intenta seguir estas recomendaciones. Por ello hemos quitado la mayoría de
las tablas HTML, cuales utilizamos solo para presentar datos tabulares (esa era la idea
principal de la tabla HTML).

Javascript

El sitio usa poco Javascript, principalmente para el menú de navegación a la izquierda


(cual por cierto es una maravilla, se llama dTree), y para la función de 'Imprimir'.

El menú dTree emplea una pequeña cookie, que se guarda temporalmente en el


cache del visitante. Sirve para mantener el estado actual del menú (nodos abiertos etc),
nada más.

ASP y SSI

Para el resto de 'lo dinámico' del sitio empleamos ASP, Active Server Page, que reside
en el servidor, y no afecta en absoluto al visitante, y SSI, abreviación de 'Server-Side
Included'. Es otra técnica del lado del servidor para ensamblar varios trozos a una
página web completa. Un poco como los ya absoletos 'frames' de HTML, pero mucho
mejor.

El futuro
Cada documento web debe ser un documento vivo. El próximo paso para xlToday
podría ser la publicación de material de sus visitantes. Seguro que hay una variedad de
ideas y soluciones Excel entre ustedes.

Si tienes alguna sugerencia sobre este tema, textos y trucos Excel que te gustaría
publicar etc, no dudes en contactarme.

Anders
info [ a ] xltoday.net

Enlaces Excel y VBA


Enlaces sobre Excel y VBA, HTML y producción web y un poco más.

Excel y VBA
Links sobre Exce, macros y VBA, tanto en español como en inglés.

HTML y producción web


Enlaces a páginas sobre producción web.

Historia de la informática
Enlaces a sitios sobre la historia de la informática.
Varios
Enlaces sobre programación Web.

Enlaces a páginas sobre producción


HTML y producción web

Recopilación de enlaces de HTML, CSS, y producción web útiles.

Apartado Enlace
Uno de los recursos más completos en la
W3schools
red.
HTML y CSS en español. Html.programacion
Manual muy bueno sobre CSS. Ignside
HTML, ASP, diseño web. Htmlweb
Enlaces sobre HTML y programación. La web del programador
Programación ASP en castellano. Programación
Menú Java de navegación tipo Windows. Destroydrop
Motor de búsqueda (el que nosotros
ASP Simple Search
empleamos, maravilloso)
Estadísticas para tus proyectos web. Metasun
Foro sobre ASP, desde Argentina. SoloASP
Estadísticas para proyectos web ASP Stats Generator

Enlaces de historia de la informática

Enlaces sobre la historia de la informática, y un poco de nostalgia también...

Apartado Enlace
Historia desde 1.820, máquinas
Historia de la informática
diferenciales de Babbage.
Nostalgia de los anos 80. Spectrum, C64,
Cacharros de 8 bits
MSX...
Maquinas gigantes: Eniac, Univac, IBM... Historia del ordenador
Repaso por las 5 generaciones de
Historia de la computación
ordenadores.
La evolución del MSX desde 1.983. Historia del nacimiento del MSX
La fantástica historia de la compañia
Commodore 64
Commodore.
Enlaces de programación en general

Enlaces sobre varios temas, como programación VB y ASP.

Apartado Enlace
Enlaces a recursos gratis. Iespana
Sobre SQL y conexiones a base de datos. Sqlmax
Para crear archivos de ayuda (CHM).
VizAcc Helpmaker
Ver ejemplo

Otros enlaces
Apartado Enlace
Encuentra amigos de todo el mundo con el mejor chat
Chat Latino
en línea.
Turismo en Canarias Information, tips and places of the Canary Islands
Tourist info and ideas for visiting the Scandinavian
Discover Scandinavia
countries.
Greece Tourist Info Greek travel information and articles on Greece.
Allergies, symptoms and
Articles on allergies and remedies.
remedies
Small Garden Fountains Small garden fountains for outdoor use

Você também pode gostar