You are on page 1of 6

Programando Macros en Excel 75

Apuntes de informtica

Capitulo N 5

Programando en Macros en Excel


5.1. Qu es un Macro?.- Un Macro es un programar que se lo realiza en Excel la codificacin es
similar al del Visual Basic 6.0 en si es la misma con la nica diferencia al leer datos y al
mostrarlos.
5.2. Conociendo el entorno del programador en Excel.- Es necesario conocer y adaptarnos al
ambiente de nuestro Software y conocerlo lo ms que se pueda en este caso iremos viendo
y nos iremos familiarizando con el Software de Visual Basic 6.0
5.2.1. El entorno de Excel.- A diferencia del Visual en el Excel lo nico que debemos conocer y
saber es sacar la barra de opciones del programador esto depender del Excel que
tengamos instalado en nuestra computadora para ver nuestro ejemplo se us el Excel
2010.
Lo primero que hacemos es entrar a la opcin Archivo, luego hacemos clic en Opciones ,
nos aparecer otra ventana y hacemos clic en la opcin Personalizar cinta de opciones y
habilitamos la opcin Programador y hacemos clic en Aceptar

3
Univ. Noya Villa Daniel
4

5
76 Programando Macros en Excel

Ya terminado de hacer esto, nos aparecera lo siguiente:

En el cual estn todas las opciones para programar en Excel, para hacer aparecer la
ventana del programador lo nico que haremos ser inserta un Command button.
5.3. Pongmonos a programar.- Hasta este punto ya conocemos lo que es programacin en
Visual y como dijimos arriba en Excel es lo mismo con algunas diferencias que iremos
observando en todos los ejemplos.
5.4. Como se codifica la celda.- Lo nico que debemos conocer es como codificar las celdas en
nuestros Macros para esto veremos la siguiente tabla:
1 2 3
1
2 A
3 B
La letra A esta en la celda (2 , 3) y la letra B en la celda (3 , 1) entonces la notacin es celda
(fila , Columna) y en nuestra macro se anotara de la siguiente manera Cells(f, c)
5.5. Diferencias entre la codificacin en Visual y Macros en Excel.- Como se dijo anteriormente
las diferencias entre estas dos codificaciones son casi nada, a continuacin mostraremos
una tabla con las diferencias entre estas dos codificaciones:
Visual Basic Macros en Excel
Private Sub Command1_Click() Sub Calcular()

End sub End sub


b = Val(Text2.Text) b = Val(Cells(3,3))
Text3.Text = Str(c) Cells(4,3) = Str(c)
Text2.Text = "" Cells(4,4) = ""
En realidad son casi las nicas cosas que cambian despus la programacin es similar.
5.6. Macros en Excel.- Nos iremos directamente a la programacin ya que todos los comandos
y controles los vimos en el anterior capitulo:
Univ. Noya Villa Daniel

Macro # 1: Haremos un macro que calculo el rea entre de dos funciones sin conocer el
punto de interseccin, para el rea nos ayudaremos con la programacin de Simpson 3/8
y para el punto de interseccin nos ayudaremos con la programacin de la regla falsa,
tambin haremos aparecer la tabla respectiva de los dos clculos:
Donde las funciones son:

Y la funcin a evaluar ser:


Programando Macros en Excel 77
Apuntes de informtica

- Nuestro Macro se vera de la siguiente manera:

- Cdigo:
Dim a As Single, b As Single, c As Single, d As Single
Dim i As Single, j As Single
Dim s1 As Double, s2 As Double
Dim dx As Double, area As Double
Dim f1, f2, Mul, f3 As Double
Public Function F(x As Single) As Single
F = (1 / x) - (x ^ 2 - 3 * x)
End Function
Sub Calcular()
Cells(7, 3) = "i"
Cells(7, 4) = "a"
Cells(7, 5) = "F(a)"
Cells(7, 6) = "b"
Cells(7, 7) = "F(b)"
Cells(7, 8) = "m"
Cells(7, 9) = "F(m)"
Cells(7, 10) = "mul"
Cells(7, 11) = "Condicion 1"
Cells(7, 12) = "Condicion 2"

Univ. Noya Villa Daniel


a = Cells(2, 3) ' Leyendo nuestros datos
n = Cells(2, 6)
c = 2
d = 4
i = 0 'Iniciando un acumulador
Do ' Realizar desde aqui
i = i + 1 'Acumulador
f1 = F(c) 'Evaluando la Funcin en el punto a
f2 = F(d) 'Evaluando la Funcin en el punto b
b = (c * f2 - d * f1) / (f2 - f1) ' Calculando m con la formula
f3 = F(b) 'Evaluando la Funcin en el punto m
Mul = f1 * f3 'Condicion 1
If Mul >= 0 Then 'Si Mul >= 0 entonces
78 Programando Macros en Excel

c = b ' toma el valor de b


Cells(7 + i, 11) = "a = m" 'Mostrando la condicion
Else 'Caso Contrario
d = b 'b toma el valor de b
Cells(7 + i, 11) = "b = m" 'Mostrando la condicion
End If
'Mostrando los resultados en la tabla
Cells(7 + i, 3) = Str(i)
Cells(7 + i, 4) = Str(c)
Cells(7 + i, 5) = Str(f1)
Cells(7 + i, 6) = Str(d)
Cells(7 + i, 7) = Str(f2)
Cells(7 + i, 8) = Str(b)
Cells(7 + i, 9) = Str(f3)
Cells(7 + i, 10) = Str(Mul)
If Abs(f3) < 10 ^ (-7) Then 'Condicion para decir si m es o no es raiz
Cells(7 + i, 12) = "m es el punto de interseccion" 'Mostrando la
condicion
Else
Cells(7 + i, 12) = "Volver a calcular" 'Mostrando la condicion
End If
Loop While ((Abs(f3)) > 10 ^ (-7)) ' Mientras ocurra que FM > 0.0000001
Cells(3, 3) = Str(b) ' Muestra el punto de interseccion
Cells(3, 9) = Str(b) ' Muestra el punto de interseccion
'Calculando el area
'Mostrando los titulos de cada columna
Cells(22, 6) = "Iteraciones" 'Columna 0
Cells(22, 7) = "F(a+(i*dx))" 'Columna 1
Cells(22, 8) = "F(a+(i*dx))" 'Columna 2
'Calculos
dx = (b - a) / n 'Calculo de dx
'Iniciando los acumuladores
s1 = 0 'Iniciando el primer acumulador
s2 = 0 'Iniciando el segundo acumulador
For i = 1 To n - 1 'Iniciando el contador
Cells(22 + i, 6) = Str(i) 'Mostrando el valor de i en nuestra tabla
If (i Mod 3 = 0) Then 'Si el residuo de i entre 3 es igual a 0
entonces
g = F(a + (i * dx))
Univ. Noya Villa Daniel

Cells(22 + i, 7) = Format(g) 'Mostrando el valor del dato evaluado


en la funcion cuando i es multiplo de 3
s1 = s1 + F(a + (i * dx)) 'Acumulador cuando i es multiplo de 3
Else 'Caso contrario
g = F(a + (i * dx))
Cells(22 + i, 8) = Format(g) 'Mostrando el valor del dato evaluado
en la funcion cuando i no es multiplo de 3
s2 = s2 + F(a + (i * dx)) 'Acumulador cuando i no es multiplo de 3
End If 'Fin de la condicion
Next i 'Siguiente paso
area = ((3 * dx) / 8) * (F(a) + (2 * s1) + (3 * s2) + F(b)) 'Calculando el
area
Programando Macros en Excel 79
Apuntes de informtica

Cells(2, 9) = Str(area) 'Mostrando el area


End Sub
Macro # 2: Haremos un macro que calcule las flexiones y las fuerzas en una viga mediante
matrices:
- Nuestra macro se vera de la siguiente manera:

- Cdigo:
Dim p As Single
Dim i As Single, j As Single, k As Single
Dim fr(1 To 100, 1 To 100) As Double
Dim fs(1 To 100, 1 To 100) As Double
Dim fx(1 To 100, 1 To 100) As Double
Sub CalFlex()
p = Val(Cells(2, 4))
If p > 0 Then
For i = 1 To p
For j = 1 To p
fr(i, j) = Val(InputBox("m(" + Str(i) + "," + Str(j) + ")=", "Matriz
de flexivilidad"))
Cells(5 + i, 1 + j) = Format(fr(i, j))
Next j
Next i
Cells(5, 2) = "Matriz de flexion"
For i = 1 To p
For j = 1 To 1
fs(i, j) = Val(InputBox("f(" + Str(i) + "," + Str(j) + ")=", "Matriz
de fuerzas"))
Cells(i + 5, p + j + 2) = Format(fs(i, j))
Next j
Next i

Univ. Noya Villa Daniel


Cells(5, 6) = "Fuerzas"
Else
MsgBox "P no puede ser menor que uno", vbCritical, "Control"
End If

For i = 1 To p
For j = 1 To 1
fx(i, j) = 0
For k = 1 To p
fx(i, j) = fx(i, j) + fr(i, k) * fs(k, j)
Cells(i + 5, p + j + 4) = Format(fx(i, j))
Next k
80 Programando Macros en Excel

Next j
Next i
Cells(5, 8) = "Flexiones"
End Sub
Sub CalcFuer()
p = Val(Cells(2, 4))
If p > 0 Then
For i = 1 To p
For j = 1 To p
fr(i, j) = Val(InputBox("m(" + Str(i) + "," + Str(j) + ")=", "Matriz
de flexivilidad"))
Cells(5 + i, 1 + j) = Format(fr(i, j))
Next j
Next i
Cells(5, 2) = "Matriz de rigidez"
For i = 1 To p
For j = 1 To 1
fs(i, j) = Val(InputBox("f(" + Str(i) + "," + Str(j) + ")=", "Matriz
de fuerzas"))
Cells(i + 5, p + j + 2) = Format(fs(i, j))
Next j
Next i
Cells(5, 6) = "Flexiones"
Else
MsgBox "P no puede ser menor que uno", vbCritical, "Control"
End If
For i = 1 To p
For j = 1 To 1
fx(i, j) = 0
For k = 1 To p
fx(i, j) = fx(i, j) + fr(i, k) * fs(k, j)
Cells(i + 5, p + j + 4) = Format(fx(i, j))
Next k
Next j
Next i
Cells(5, 8) = "Fuerzas"
End Sub
5.7. Recomendaciones.- Al intentar programar o hacer Macros en Excel les aconsejo siempre
Univ. Noya Villa Daniel

estar lo ms tranquilo posible y concentrados ya que vern que programar es una de las
tareas ms sencillas, ya que lo nico que debemos saber son los lenguajes de codificacin.

You might also like