You are on page 1of 5

EIQ150-1

Mtodos numricos y programacin


Ayudanta
RANGO DE UNA MATRIZ
Teniendo una matriz en la hoja 1 de la planilla de Excel, ste programa contar el nmero de filas y luego el nmero
de columnas de la matriz ingresada entregando su rango. Para esto utilizamos el comando IsEmpty(%) dnde %
es una variable, que comprueba si la variable no tiene ningn valor. La diferencia con el comando Empty es que,
aparte de no ser una funcin, ste comprueba si la variable tiene el valor inicial por defecto, que en el caso de
celdas es cero por lo que no lo podemos utilizar si la matriz contiene ceros.
Sub programa1()
'Ciclo condicionado con un contador para filas no-vacas.
Do
x = x + 1
Loop Until IsEmpty(Cells(x + 1, 1))
'Ciclo condicionado con un contador para columnas no-vacas.
Do
y = y + 1
Loop Until IsEmpty(Cells(1, y + 1))
'Imprimimos el rango de la matriz.
MsgBox ("El rango de la matriz es " & x & " x " & y)
End Sub

A. F. A.

EIQ150-1
Mtodos numricos y programacin
Ayudanta
ORDENAR UNA LISTA DE DATOS DE MENOR A MAYOR
Con una lista de datos en la columna A de la planilla de Excel, el programa tomar los datos y mover los menores
una posicin hacia arriba por vez de tal manera de obtener una lista ordenada de menor a mayor. Para lograrlo
utilizamos una varibale auxiliar que retendr el valor del nmero que trabajamos actual y permitir intercambiar
el siguiente por el actual sin perder el valor.
Sub programa2()
n = Val(InputBox("Largo de la lista."))
'Definimos un arreglo de una dimensin (vector) con el tamao de la lista de datos.
ReDim a(n)
'Ingresamos cada dato de la lista en el vector.
For i = 1 To n
a(i) = Cells(i, 1)
Next i
'Como la lista tiene un valor de n, el ciclo est limitado a n-1 nmeros.
For j = 1 To n - 1
'Cada valor se comparada con el siguiente, proceso que se repite n-1 veces.
For i = 1 To n - 1
'Para ordenar de menor a mayor se debe cumplir la condicin que el nmero siguiente
'sea menor al nmero actual.
If a(i + 1) < a(i) Then
'Creamos una variable auxiliar para almacenar el valor actual y no perderlo al
'reemplazarlo por el siguiente.
aux = a(i)
'Intercambiamos los dos valores de tal manera de ordenar de menor a mayor.
a(i) = a(i + 1)
a(i + 1) = aux
End If
Next i
Next j
'Imprimimos el valor del vector modificado obteniendo una lista ordenada de menor a mayor.
For i = 1 To n
Cells(i, 2) = a(i)
Next i
End Sub

OBSERVACION: Para obtener una lista ordenada de mayor a menor basta con cambiar el signo (<) por (>)

A. F. A.

EIQ150-1
Mtodos numricos y programacin
Ayudanta
PIRAMIDES DE NUMEROS EN CELDAS
Podemos crear un ciclo que mueva tanto filas como columnas de tal manera que recree la estructura de
crecimiento escalonado de una piramide con las celdas de una planilla en Excel. Estas estructuras pueden variar
de muchas maneras y es cuestin de gustos la forma en como la realiazamos. Con el fin de ejemplificar, tomaremos
la siguiente estructura:
Sub piramide_std()
N = Val(InputBox("N"))
Cells(1, N) = PUNTA
For i = 1 To N
For j = 1 To i - 1
Cells(i, N - j) = IZQUIERDA
Cells(i, N) = CENTRO
Cells(i, N + j) = DERECHA
Next j
Next i
End Sub

Es esta estructura, el valor N corresponde a un nmero significativo de la piramide (como puede ser la altura, el
punto medio, el nmero mayor, entre otros) con el que se basar el clculo de toda la matemtica de sta. El
valor tope de la pirmide corresponde a la PUNTA, la columna central corresponde a CENTRO y los valores
variables restantes corresponden a la IZQUIERDA y DERECHA.
Ejemplo 1:
A
1
2
3
4
5

2
1

Tabla 1. Pirmide 1 en hoja de Excel.

Analizamos el efecto del cambio de cada fila y columna en los valores de cada celda:
PUNTA
i = 1 j = 0
i = 2 j = 1 IZQUIERDA
CENTRO
DERECHA
i = 3 j = 1 IZQUIERDA
CENTRO
DERECHA
j = 2 IZQUIERDA
CENTRO
DERECHA

= cells(1, 5) = 5
(No corre el ciclo FOR de j, se salta)
=
=
=
=
=
=
=
=
=

cells(2,
cells(2,
cells(2,
cells(3,
cells(3,
cells(3,
cells(3,
cells(3,
cells(3,

4)
5)
6)
4)
5)
6)
3)
5)
7)

=
=
=
=
=
=
=
=
=

4
5
4
4
5
4
3
5
3

(se sobrescribe, no afecta)

A. F. A.

EIQ150-1
Mtodos numricos y programacin
Ayudanta
Observamos que para i=3, tanto para j=1 como j=2 el valor de las celdas de IZQUIERDA y DERECHA (3, 4)
cambian. En cambio, para i=2 como para i=3 con j=1 el valor de la celdas (4) no cambian. De esto podemos
deducir que los valores de las celdas, tanto para IZQUIERDA como para DERECHA, son independientes de i y
slo dependientes de j. Y el valor de la columna CENTRAL es invariable e igual al valor de N.
Luego, relacionamos con aritmtica el valor N ingresado con los ciclos de filas i y columnas j para obtener una
expresin que corresponda a los valores de cada celda de la pirmide. De esta manera encontramos las
siguientes expresiones:
PUNTA
IZQUIERDA
CENTRO
DERECHA

=
=
=
=

cells(1,
cells(i,
cells(i,
cells(i,

N) = N
N - j) = N - j
N) = N
N + j) = N - j

Por lo tanto, el cdigo VBA es:


Sub piramide_std()
N = Val(InputBox("N"))
Cells(1, N) = N
For i = 1 To N
For j = 1 To i - 1
Cells(i, N - j) = N - j
Cells(i, N) = N
Cells(i, N + j) = N - j
Next j
Next i
End Sub

A. F. A.

EIQ150-1
Mtodos numricos y programacin
Ayudanta
Ejemplo 2:
A
1
2
3
4
5

1
1

Tabla 2. Pirmide 2 en hoja de Excel.

De la misma manera anterior, analizamos cada valor y encontramos la combinacin de i y j con la que obtenemos
los valores correspondientes de cada celda.
PUNTA
i = 1 j = 0
i = 2 j = 1 IZQUIERDA
CENTRO
DERECHA
i = 3 j = 1 IZQUIERDA
CENTRO
DERECHA
j = 2 IZQUIERDA
CENTRO
DERECHA

= cells(1, 5) = 1
=
=
=
=
=
=
=
=
=

cells(2,
cells(2,
cells(2,
cells(3,
cells(3,
cells(3,
cells(3,
cells(3,
cells(3,

4)
5)
6)
4)
5)
6)
3)
5)
7)

=
=
=
=
=
=
=
=
=

1
2
3
2
3
4
1
3
5

...
...
...
...
...
...
...
...
...

(No
i
i
i +
i i
i +
i
i
i +

corre el ciclo FOR de j, se salta)


1 ... i - j
1 ... i + j
1
1
2 ... i - j
2 ... i + j

Se observa que tanto para la IZQUIERDA como la DERECHA el valor de la celda depende tanto de i como de j.
Luego observamos el cambio por parte que ejercen el valor de las filas y las columnas. Al obtener las relaciones
podemos escribir el cdigo VBA:
Sub piramide_std()
N = Val(InputBox("N"))
Cells(1, N) = 1
For i = 1 To N
For j = 1 To i - 1
Cells(i, N - j) = i - j
Cells(i, N) = i
Cells(i, N + j) = i + j
Next j
Next i
End Sub

A. F. A.