Vous êtes sur la page 1sur 26

Introduccion

Ejemplos de macros
Este libro contiene ejemplos de algunas macros sencillas de Excel para ver su mejor aprovecha
miento. Aprender a usar funciones predefinidas por el usuario de manera sencilla con un poco
de introduccion al codigo de Visual Basic
Uso de botones de comando simples para asignacion de macros asi como asignar macros a
teclas. Grabacion automatica de tareas repetitivas y escritura de una macro compleja.

Tambien se mostrara como crear funciones predefinidas por el usuario (UDF) para realizar
operaciones que no vienen con la version de fabrica de Excel.

Este libro contiene al final los modulos a teclearse en el editor Visual Basic.
Se adapto para la nueva version Excel2007 y con compatibilidad para versiones anteriores de Excel.

Por: Lic. Sergio Hugo Sanchez O.


IDSystems
Actualizacion: Octubre 2009
www.idsystemsmx.com

Página 1
Insertar fila

Linea demostracion

Macro muy sencilla, que se grabo con las herramientas de Excel que
permite insertar una linea en la parte superior de la hoja de calculo y
que se vinculo a un boton de comando

Página 2
Comision

Informacion sobre las acciones


Precio original 24
Numero de acciones 100
Precio de Venta 55
Comision #VALUE!
En el ejemplo se ha escrito una macro con codigo de Visual Basic para crear una funcion
definida por el usuario conocida como UDF (User Defined Function), con la cual se calculan las
comisiones. Esta funcion despues de escrita sirve para usarse en todo el libro cuantas veces se
requiera sin necesidad de repetir calculos. Ademas de que dicha funcion lleva una condicion.

Esta funcion toma dos valores:


Numero de acciones y Precio por accion; o sea: C3 y C4
De aqui se calcula el Precio de Venta; o sea: C3 * C4

Sin embargo, si este resultado es menor de 15,000, la comision se calcula por el 3% de las
acciones vendidas mas 25. De lo contrario se calcula un 9% de acciones vendidas * el 3% mas
25. Este resultado es la comision.

Si no hicieramos la funcion predefinida vea el ejemplo a continuacion:

Informacion sobre las acciones


Precio original 24
Numero de acciones 100
Precio de Venta 55
5500 Primer multiplicacion
Comision 28 Condicion para comision

Si usamos funciones estandar tendriamos que hacer dos pasos o en uno solo
tendriamos una formula muy compleja:

=SI(C26*C27<15000,25+.03*C26,25+.03*(.9*C26))

Página 3
Si usamos funciones estandar tendriamos que hacer dos pasos o en uno solo
tendriamos una formula muy compleja:

=SI(C26*C27<15000,25+.03*C26,25+.03*(.9*C26))
Comision

Página 4
Tipo Cambio

Cambio de Divisas
Tipo de cambio 8.5
Cambio
Pesos 1000 #VALUE! 117.65 ###
Dolares 100 #VALUE! ###

Funcion TipoCambio
Funcion Dolares
Mezcla de Dolares y
Pesos en una sola
Formula normal
Funcion Pesos funcion

Página 5
Botones

Ene Feb Mar Abr May Jun


Concepto

En una hoja en blanco se puede poner este


Total 0 0 0 0 0 0 boton, asignado a una macro llamada
Encabezado_inicial para crear el formato que ve
en esta hoja. Esta macro se grabo de forma
automatica para facilitar el aprendizaje del
codigo.

Página 6
Funciones y Macros

Alumno Calificacion Uso de funcion CARACTER() para marcar un


Juan 10 ü elemento si sucede algo o se cumple una condicion.
Miguel 5 Se usa junto con la funcion SI y el tipo de Letra
Windings para la marca.
Adriana 9ü
Paco 8ü
Olga 7.5 ü

Página 7
Factura

Factura 001
Empresa Equipos y Sistemas P.C. EYS980402-111
Direccion Alvaro Obregon #33C
Ciudad H. Matamoros, Tam 21-Apr-98

Cantidad Concepto P. Unitario Precio


1 Computadora P133Mhz Multimedia 12,456.00 12,456.00
1 Impresora HP 650 color 2,345.00 2,345.00
1 Scanner cama plana 3,567.00 3,567.00

En este ejemplo de factura se ve la aplicacion de una


funcion definida por el usuario llamada ChequeTexto()
que permite poner con letras una cantidad numerica.
Dicha funcion esta dentro de la hoja Modulo6 (codigo
de Visual Basic)

Subtotal 18,368.00
#VALUE! IVA 1836.8
Total 20,204.80

Página 8
Factura

Página 9
ColorRojo

Alumno Ene Feb Mar Abr May Jun Promedio


Juan Mondragon 10 8 10 9 10 8 9.17 Aprobado #VALUE!
Yolanda Turrubiates 9 8 8 7 7 9 8 Aprobado #VALUE!
Rossy Armendariz 5 5 4 6 5 4 4.83 Reprobado #VALUE!
Oscar Salinas 9 9 10 9 8 9 9 Aprobado #VALUE!
Ana Ma. Lara 9 7 8 8 8 9 8.17 Aprobado #VALUE!

10 8 10 9 10 8 9.17
9 8 8 7 7 9 8
5 5 4 6 5 4 4.83
9 9 10 9 8 9 9
9 7 8 8 8 9 8.17

Página 10
VBA_Macros

CODIGO VBA

A partir de esta hoja se presentan mas hojas con el codigo VBA para realizar en el EDITOR VISUAL BASIC de Excel
Estas macros y funciones, se usaran en las hojas anteriores

Macros

ColorRojo
Encabezado_Inicial
Insertar
Verifica

Estas macros se enlazaran a las hojas anteriores.

El resto de los modulos son funciones UDF para insertarse dentro de las formulas.

Página 11
Modulo1

MODULO1
'Ejemplo de Funcion definida por el Usuario
'Por: Lic. Sergio Hugo Sanchez
'Tomada de la ayuda de MS Excel 5.0
'Esta funcion realiza el calculo de comisiones
Function Comisiones(AccionesVendidas, PrecioPorAccion)
PrecioVentaTotal = AccionesVendidas * PrecioPorAccion
If PrecioVentaTotal < 15000 Then
Comisiones = 25 + 0.03 * AccionesVendidas
Else
Comisiones = 25 + 0.03 * (0.9 * AccionesVendidas)
End If
End Function

Página 12
Modulo2

MODULO2
'
' Insertar Macro
' Macro grabada 13/06/96 por
'
'
Sub Insertar()
Rows("1:1").Select
Selection.Insertar Desplazar:=xlDown
End Sub

Página 13
Modulo3

MODULO3

'Funcion de Cambio de Divisas


'Por: Lic. Sergio Hugo Sanchez
'Ejemplo para Cursos Excel Avanzado

Function TipoCambio(value, Divisa, CompraVenta)


If CompraVenta = 1 Then
' Cambio de pesos a dolares
TipoCambio = value / Divisa
Else
' Cambio de dolares a pesos
TipoCambio = value * Divisa
End If
End Function

Function Dolares(value, CompraVenta)


Dolares = value / CompraVenta
End Function

Function Pesos(value, CompraVenta)


Pesos = value * CompraVenta
End Function

Página 14
Modulo4

MODULO4

'Funcion NtoDinero
'Por: Lic. Sergio Hugo Sanchez
Function NtoDinero(quant)
rvalue = " "
If quant > 999999.99 Then
NtoDinero = " "
End If
'Romper el numero en partes
amt = Application.Strings(quant, "000000.00")
thou = Application.Val(Application.Extrae(amt, 1, 3))
hund = Application.Val(Application.Extrae(amt, 4, 3))
cnts = Application.Val(Application.Extrae(amt, 8, 2))
'Construir la cadena de caracteres
If thou <> 0 Then
thou = NtoLetras(thou)
Else
thou = ""
End If
If hund <> 0 Then
hund = NtoLetras(hund)
Else
hund = ""
End If
If cnts <> 0 Then
cnts = NtoLetras(cnts)
Else
cnts = ""
End If
rvalue = Application.si(Application.largo(thou) = 0, "", thou + "Mil") + Application.si(Application.largo(hund) = 0, "", hund)
rvalue = Application.si(Application.largo(rvalue) = 0, "Cero pesos y ", rvalue + " pesos y ")
rvalue = Application.si(rvalue = "Un pesos y ", "Un peso y ", rvalue)
NtoDinero = rvalue

End Function

Function NtoLetras(value)
If value < 0 Or value >= 2000 Then
NtoLetras = ""
End If
value = Application.entero(value)
If value = 0 Then
NtoLetras = ""
End If
'Finalmente, convertimos el numero!
If value <= 99 Then
NtoLetras = c_dec(value)
Else
res = c_teen(Application.entero(value / 100)) + "Ciento "
res2 = Application.entero(value / 100) * 100

Página 15
Modulo4

res3 = Application.si(value - res2 = 0, "", "y " + c_dec(value - res2))


NtoLetras = res3
End If
End Function

Function c_dec(d_value)
svalue = ""
Select Case d_value
Case d_value < 20
c_dec = (d_value)
Case d_value < 30
svalue = "Veinte"
d_value = d_value - 20
Case d_value < 40
svalue = "Treinta"
d_value = d_value - 30
Case d_value < 50
svalue = "Cuarenta"
d_value = d_value - 40
Case d_value < 60
svalue = "Cincuenta"
d_value = d_value - 50
Case d_value < 70
svalue = "Sesenta"
d_value = d_value - 60
Case d_value < 80
svalue = "Setenta"
d_value = d_value - 70
Case d_value < 90
svalue = "Ochenta"
d_value = d_value - 80
Case d_value < 100
svalue = "Noventa"
d_value = d_value - 90
End Select
tvalue = c_teen(d_value)
If Application.largo(tvalue) <> 0 Then
svalue = svalue + "-" + tvalue
End If
c_dec = Application.Clean(svalue)
End Function

Function c_teen(t_value)
Select Case t_value
Case t_value = 0
c_teen = " "
Case t_value = 1
c_teen = "Uno "
Case t_value = 2
c_teen = "Dos "
Case t_value = 3

Página 16
Modulo4

c_teen = "Tres "


Case t_value = 4
c_teen = "Cuatro "
Case t_value = 5
c_teen = "cinco "
Case t_value = 6
c_teen = "seis "
Case t_value = 7
c_teen = "siete "
Case t_value = 8
c_teen = "ocho "
Case t_value = 9
c_teen = "nueve "
Case t_value = 10
c_teen = "diez "
Case t_value = 11
c_teen = "once "
Case t_value = 12
c_teen = "doce "
Case t_value = 13
c_teen = "trece "
Case t_value = 14
c_teen = "catorce "
Case t_value = 15
c_teen = "quince "
Case t_value = 16
c_teen = "dieciseis "
Case t_value = 17
c_teen = "diecisiete "
Case t_value = 18
c_teen = "dieciocho "
Case t_value = 19
c_teen = "diecinueve "
End Select
End Function

Página 17
Modulo6

MODULO6

'Funcion ChequeTexto
'Adaptada al espanol desde articulo de Agosto 1997 en PCMagazine
'Realizada originalmente por:
'Adaptacion: Lic. Sergio Hugo Sanchez
'Para demostrar uso avanzado de codigo Visual Basic en Cursos Excel Avanzado
'
'Esta funcion que esta al finalizar se divide en otras sub-funciones para
'mostrar una modularidad de programacion y que se comprenda mas facilmente
'descomponiendo el numero pasado en partes de miles, centenas, decenas y
'unidades.
'

Function UnDigito(Num As Long) As String


Dim Words(0 To 9) As String
Words(0) = "cero"
Words(1) = "uno"
Words(2) = "dos"
Words(3) = "tres"
Words(4) = "cuatro"
Words(5) = "cinco"
Words(6) = "seis"
Words(7) = "siete"
Words(8) = "ocho"
Words(9) = "nueve"
UnDigito = Words(Num)
End Function

Function DosDigitos(Num As Long) As String


Dim WordsBy10(2 To 9) As String
Dim Ones As Long, Tens As Long
Dim OnesString As String
Dim TensString As String
Ones = Num Mod 10
Tens = Int(Num / 10)
If Tens = 0 Or Tens > 1 Then
OnesString = UnDigito(Ones)
If Tens = 0 Then
DosDigitos = OnesString
Exit Function
End If
Else
Select Case Ones
Case 0
DosDigitos = "diez"
Exit Function
Case 1
DosDigitos = "once"
Exit Function

Página 18
Modulo6

Case 2
DosDigitos = "doce"
Exit Function
Case 3
DosDigitos = "trece"
Exit Function
Case 4
DosDigitos = "catorce"
Exit Function
Case 5
DosDigitos = "quince"
Exit Function
Case 6
DosDigitos = "dieciseis"
Exit Function
Case 7
DosDigitos = "diecisiete"
Exit Function
Case 8
DosDigitos = "dieciocho"
Exit Function
Case 9
DosDigitos = "diecinueve"
Exit Function
End Select
End If
WordsBy10(2) = "veinte"
WordsBy10(3) = "treinta"
WordsBy10(4) = "cuarenta"
WordsBy10(5) = "cincuenta"
WordsBy10(6) = "sesenta"
WordsBy10(7) = "setenta"
WordsBy10(8) = "ochenta"
WordsBy10(9) = "noventa"
If Ones > 0 Then
WordsBy10(Tens) = WordsBy10(Tens) & " y "
ElseIf Tens >= 2 Then
OnesString = ""
End If
If Tens >= 2 Then
TensString = WordsBy10(Tens)
Else
TensString = ""
End If
DosDigitos = TensString + OnesString
End Function

Function TresDigitos(Num As Long) As String


Dim Remainder As Long, Hundreds As Long
Dim HundredsString As String, OnesString As String

Página 19
Modulo6

Remainder = Num Mod 100


Hundreds = Int(Num / 100)
OnesString = DosDigitos(Remainder)
'HundredsString = OneDigit(Hundreds) + "cientos"
HundredsString = "ciento"
If Hundreds = 2 Then HundredsString = "doscientos"
If Hundreds = 3 Then HundredsString = "trecientos"
If Hundreds = 4 Then HundredsString = "cuatrocientos"
If Hundreds = 5 Then HundredsString = "quinientos"
If Hundreds = 6 Then HundredsString = "seiscientos"
If Hundreds = 7 Then HundredsString = "setecientos"
If Hundreds = 8 Then HundredsString = "ochocientos"
If Hundreds = 9 Then HundredsString = "novecientos"
If Hundreds = 0 Then HundredsString = ""
If Remainder = 0 And Hundreds > 0 Then OnesString = ""
If Remainder > 0 And Hundreds > 0 Then HundredsString = HundredsString + " "
TresDigitos = HundredsString + OnesString
End Function

Function SeisDigitos(Num As Long) As String


Dim Remainder As Long, Thousands As Long
Dim OnesString As String, ThousandsString As String
Remainder = Num Mod 1000
Thousands = Int(Num / 1000)
OnesString = TresDigitos(Remainder)
ThousandsString = TresDigitos(Thousands) + " mil"
If Remainder = 0 And Thousands > 0 Then OnesString = ""
If Remainder > 0 And Thousands > 0 Then ThousandsString = ThousandsString + " "
If Thousands = 0 Then ThousandsString = ""
SeisDigitos = ThousandsString + OnesString
End Function

Function GetCents(Num As Double) As String


Cents = (Num * 100) Mod 100
StrCents = Str(Cents)
If Cents < 10 Then StrCents = " 0" + Right(StrCents, Len(StrCents) - 1)
GetCents = StrCents + "/100"
End Function

Function Combine(Num As Double) As String


DollarsString = LTrim(SeisDigitos(Int(Num)))
CentsString = GetCents(Num)
Combine = DollarsString + " y" + CentsString
End Function

Function ChequeTexto(Num As Double, NumChars As Integer) As String


CombineText = Combine(Num)
TextLength = Len(CombineText)
NumStars = NumChars - TextLength
ChequeTexto = CombineText + String(NumStars, "*")

Página 20
Modulo6

End Function

Página 21
Modulo7

MODULO7

'
' Encabezado_inicial Macro
' Macro grabada 21/04/98 por Lic. Sergio Hugo Sanchez O.
'
'
Sub Encabezado_inicial()
ActiveCell.FormulaR1C1 = "'Concepto"
Range("B1").Select
ActiveCell.FormulaR1C1 = "'Ene"
Selection.AutoFill Destination:=Range("B1:G1"), Type:= _
xlFillDefault
Range("B1:G1").Select
Selection.Font.Bold = True
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Columns("F:F").EntireColumn.AutoFit
Columns("G:G").EntireColumn.AutoFit
Range("A7").Select
ActiveCell.FormulaR1C1 = "'Total"
Range("A7").Select
Selection.Font.Bold = True
Selection.Font.Italic = True
Range("A7:G7").Select
Selection.Borders(xlLeft).LineStyle = xlNone
Selection.Borders(xlRight).LineStyle = xlNone
Selection.Borders(xlTop).LineStyle = xlNone
Selection.Borders(xlBottom).LineStyle = xlNone
Selection.BorderAround Weight:=xlMedium, ColorIndex:=xlAutomatic
Range("B7").Select
ActiveCell.FormulaR1C1 = "=SUMA(L(-5)C:L(-1)C)"
Range("B7").Select
Selection.AutoFill Destination:=Range("B7:G7"), Type:= _
xlFillDefault
Range("B7:G7").Select
End Sub
'
' ColorRojo Macro
' Macro grabada 21/04/98 por Lic. Sergio Hugo Sanchez.
' Poner color de texto rojo
'
'
Sub ColorRojo()
Selection.Font.ColorIndex = 3
End Sub

Function ColorRed(celdita)

Página 22
Modulo7

If celdita < 6 Then


txtmsg = "Reprobado"
'Selección.Fuente.ÍndiceColor = 3
Else
txtmsg = "Aprobado"
End If
ColorRed = txtmsg
End Function

Sub Verifica()
If ActiveCell.FormulaR1C1 < 6 Then
ActiveCell.FormulaR1C1 = "'Reprobado"
Selection.Font.ColorIndex = 3
Else
ActiveCell.FormulaR1C1 = "'Aprobado"
End If
End Sub

Página 23
PCMagazine_VBA

PCMAGAZINE

'Función OneDigit(Num QueSea Largo) QueSea Cadena


' Dim Words(0 Al 9) QueSea Cadena
' Words(0) = "Cero"
' Words(1) = "Uno"
' Words(2) = "Dos"
' Words(3) = "Tres"
' Words(4) = "Cuatro"
' Words(5) = "Cinco"
' Words(6) = "Seis"
' Words(7) = "Siete"
' Words(8) = "Ocho"
' Words(9) = "Nueve"
' OneDigit = Words(Num)
'Fin Función

'Función TwoDigit(Num QueSea Largo) QueSea Cadena


' Dim WordsBy10(2 Al 9) QueSea Cadena
' Dim Ones QueSea Largo, Tens QueSea Largo
' Dim OnesString QueSea Cadena
' Dim TensString QueSea Cadena
' Ones = Num Mód 10
' Tens = Ent(Num / 10)
' Si Tens = 0 O Tens > 1 Entonces
' OnesString = OneDigit(Ones)
' Si Tens = 0 Entonces
' TwoDigit = OnesString
' Salir Función
' Fin Si
' SiOtro
' Seleccionar Caso Ones
' Caso 0
' TwoDigit = "Diez"
' Salir Función
' Caso 1
' TwoDigit = "Once"
' Salir Función
' Caso 2
' TwoDigit = "Doce"
' Salir Función
' Caso 3
' TwoDigit = "Trece"
' Salir Función
' Caso 4
' TwoDigit = "Catorce"
' Salir Función
' Caso 5
' TwoDigit = "Quince"
' Salir Función

Página 24
PCMagazine_VBA

' Caso 6
' TwoDigit = "Dieciseis"
' Salir Función
' Caso 7
' TwoDigit = "Diecisiete"
' Salir Función
' Caso 8
' TwoDigit = "Dieciocho"
' Salir Función
' Caso 9
' TwoDigit = "Diecinueve"
' Salir Función
' Fin Seleccionar
' Fin Si
' WordsBy10(2) = "Veinte"
' WordsBy10(3) = "Treinta"
' WordsBy10(4) = "Cuarenta"
' WordsBy10(5) = "Cincuenta"
' WordsBy10(6) = "Sesenta"
' WordsBy10(7) = "Setenta"
' WordsBy10(8) = "Ochenta"
' WordsBy10(9) = "Noventa"
' Si Ones > 0 Entonces
' WordsBy10(Tens) = WordsBy10(Tens) & "-"
' SinoSi Tens >= 2 Entonces
' OnesString = ""
' Fin Si
' Si Tens >= 2 Entonces
' TensString = WordsBy10(Tens)
' SiOtro
' TensString = ""
' Fin Si
' TwoDigit = TensString + OnesString
'Fin Función

'Función ThreeDigit(Num QueSea Largo) QueSea Cadena


' Dim Remainder QueSea Largo, Hundreds QueSea Largo
' Dim HundredsString QueSea Cadena, OnesString QueSea Cadena
' Remainder = Num Mód 100
' Hundreds = Ent(Num / 100)
' OnesString = TwoDigit(Remainder)
' HundredsString = OneDigit(Hundreds) + " ciento"
' Si Hundreds = 0 Entonces HundredsString = ""
' Si Remainder = 0 Y Hundreds > 0 Entonces OnesString = ""
' Si Remainder > 0 Y Hundreds > 0 Entonces HundredsString = HundredsString + " "
' ThreeDigit = HundredsString + OnesString
'Fin Función

'Función SixDigit(Num QueSea Largo) QueSea Cadena


' Dim Remainder QueSea Largo, Thousands QueSea Largo

Página 25
PCMagazine_VBA

' Dim OnesString QueSea Cadena, ThousandsString QueSea Cadena


' Remainder = Num Mód 1000
' Thousands = Ent(Num / 1000)
' OnesString = ThreeDigit(Remainder)
' ThousandsString = ThreeDigit(Thousands) + " mil"
' Si Remainder = 0 Y Thousands > 0 Entonces OnesString = ""
' Si Remainder > 0 Y Thousands > 0 Entonces ThousandsString = ThousandsString + " "
' Si Thousands = 0 Entonces ThousandsString = ""
' SixDigit = ThousandsString + OnesString
'Fin Función

'Función GetCents(Num QueSea Doble) QueSea Cadena


' Cents = (Num * 100) Mód 100
' StrCents = Cad(Cents)
' Si Cents < 10 Entonces StrCents = " 0" + Der(StrCents, Longitud(StrCents) - 1)
' GetCents = StrCents + "/100"
'Fin Función

'Función Combine(Num QueSea Doble) QueSea Cadena


' DollarsString = RecortarIzq(SixDigit(Ent(Num)))
' CentsString = GetCents(Num)
' Combine = DollarsString + " y" + CentsString
'Fin Función

'Función CheckText(Num QueSea Doble, NumChars QueSea Entero) QueSea Cadena


' CombineText = Combine(Num)
' TextLength = Longitud(CombineText)
' NumStars = NumChars - TextLength
' CheckText = CombineText + Cadena(NumStars, "*")
'Fin Función

Página 26

Vous aimerez peut-être aussi