Académique Documents
Professionnel Documents
Culture Documents
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.
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
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 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
Página 6
Funciones y Macros
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
Subtotal 18,368.00
#VALUE! IVA 1836.8
Total 20,204.80
Página 8
Factura
Página 9
ColorRojo
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
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
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
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
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.
'
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
Página 19
Modulo6
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
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
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
Página 25
PCMagazine_VBA
Página 26