11.-macros- arreglos 1 - wordpress.cominf-130 (utfsm) programación y tdg 20/21 transpose...

21
Macros: Arreglos 1 Programación y Tratamiento de datos para la Gestión http://progra.usm.cl UTFSM INF-130 (UTFSM) Programación y TDG 1/21

Upload: others

Post on 07-Oct-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

Macros: Arreglos 1

Programación y Tratamiento de datos para la Gestión

http://progra.usm.clUTFSM

INF-130 (UTFSM) Programación y TDG 1/21

Page 2: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

For Each ... Next

Sentencias For

Para realizar repeticiones conocemos la sentencia While hasta ahora.

En Excel existen también las sentencias tipo For; la primera que revisaremos es el For Each.

Esta sirve para realizar instrucciones por cada elemento de un Objeto o Matriz especificada

(¿Recuerdas lo que era un Objeto y cuáles son algunos? Revisa la primera parte de Macros.).

Entonces entendemos que For Each de Excel es equivalente a decir: “Por cada elemento del

Objeto/Matriz”.

INF-130 (UTFSM) Programación y TDG 2/21

Page 3: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

For Each ... Next

For Each y Objetos

La estructura del For Each es de la siguiente forma:

For Each <elemento> In <Objeto>

‘ instrucciones

Next ‘ <elemento>

En la estructura, <elemento> sería la variable que almacenaría cada uno de estos

Elementos que se leen de un determinado Objeto. Por ejemplo un “Rango de celdas” tiene

una cierta cantidad de celdas, y esta sentencia leería cada una de ellas mediante una

adecuada referenciación del objeto.

INF-130 (UTFSM) Programación y TDG 3/21

Page 4: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

For Each ... Next

Ejemplos – Range Cells

En el siguiente ejemplo vemos el cálculo del promedio de un rango de celdas, yposteriormente este se coloca en otra celda ya definida.

Mediante el uso del For Each celda In Range(“B3:B6”).Cells, estamos leyendo cadacelda del rango especificado, y posteriormente se usa el valor mediante celda.Value;finalmente con el Next indicamos que leemos la siguiente celda del rango, para esteejemplo.INF-130 (UTFSM) Programación y TDG 4/21

Page 5: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

For Each ... Next

Ejemplos - Range

En este ejemplo vemos que se puede utilizar una variable con el Objeto/Matriz que sequiere recorrer. Además se puede usar Range().Cells como Range() para referenciar alrango de celdas. El código cambia el color al promedio, colocando azul a los aprobados yrojo a los que no lo hicieron.

Prueba la función RGB cambiando los valores entre 0...255 para ver variaciones de color.

¿Qué se obtiene con 0,0,0? ¿255,255,255? ¿0,255,0?

INF-130 (UTFSM) Programación y TDG 5/21

Page 6: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

A continuación se revisa el acceso a la colección de Hojas del archivo, mostrando elnúmero de la hoja y su nombre:

OJO: ThisWorkbook puede ser reemplazado por ActiveWorkbook.Worksheets en el casoque haya más de un libro abierto, y se quiera usar el libro Activo. También se puede llamaral libro usando Workbooks(“Libro_ejemplo.xlsx”).Worksheets.

INF-130 (UTFSM) Programación y TDG 6/21

For Each ... Next

Ejemplos - Sheets

Page 7: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

El siguiente código trabaja con los libros de Excel. Mostrará el nombre de todos los archivosde Excel que estén abiertos. En este caso, está el libro de ejemplos de For Each.

INF-130 (UTFSM) Programación y TDG 7/21

For Each ... Next

Ejemplos - Workbooks

Page 8: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

El For ... Next sirve para repetir pasos una determinada cantidad de veces, la cual puede serconstante o variable. Esta estructura es muy similar en utilidad y funcionamiento al While.

INF-130 (UTFSM) Programación y TDG 8/21

For ... Next

Estructura

For <inicialización de variable> To <límite>

‘ instrucciones

Next <incrementar variable>

---

<inicialización de variable>

While <variable no llegue al límite>

‘ instrucciones

<incrementar variable>

Wend

Equivalentes

Page 9: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

INF-130 (UTFSM) Programación y TDG 9/21

For ... Next

Comparación

For i=1 To 5

‘ instrucciones

Next i

---

i=1

While i<=5

‘ instrucciones

i=i+1

Wend

Equivalentes

Page 10: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

INF-130 (UTFSM) Programación y TDG 10/21

Arrays

Arreglos o ArraysSe entiende un arreglo como un grupo de variables o valores que están contenidas enotro elemento. Dentro del arreglo podemos referirnos a un valor en particular utilizando laposición donde se encuentra, a la cual llamaremos índice.

Se declara una variable con el tipo de dato que quiere que el arreglo contenga (Integer,String, Float, etc.). La diferencia radica en que se le define cuantos elementos tendrá, y sehace de esta manera:

Dim <Variable>(1 To <N>) As <tipo_de_dato>

Luego para añadir valores:

<Variable>(<índice>) = <valor_segun_tipo_de_dato>

Esto quedará más claro con el siguiente ejemplo.

Page 11: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

El siguiente ejemplo generará una tabla con valores que están en un array. Note cómo seutiliza el For ... Next para referenciar las posiciones.

INF-130 (UTFSM) Programación y TDG 11/21

Arrays

Arreglos o Arrays

Page 12: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

Observación: Se puede definir el tamaño de distintas maneras. Por ejemplo:

• La declaración es con Dim <Variable>(1 To <N>) As <tipo_de_dato>Hay N elementos en total. Debe recorrerse con un For i=1 To N.

• La declaración es con Dim <Variable>(<N>) As <tipo_de_dato>El primer índice parte en 0, y hay ”N + 1” elementos en total.Debe recorrerse con un For i=0 To N.También puede utilizarse For Each <elemento> In <Variable> ... Next.En el caso del For Each, <elemento> tendría el valor del índice que extrae.

• La declaración es con Dim <Variable>(0 To <N>) As <tipo_de_dato>Funciona igual que la declaración anterior.

INF-130 (UTFSM) Programación y TDG 12/21

Arrays

Arreglos o Arrays

Page 13: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

Se utiliza Redim para re-dimencionar (o cambiar el tamaño) del arreglo ya definido. Se utiliza dela siguiente forma:

Dim MiArreglo() As Integer ‘ cuando está definido así “()” es porque aún no se le define un tamañoRedim MiArreglo(5) ‘ se asigna un espacio para 5For i=1 To 5 ‘ se inicializa el arreglo

MiArreglo(i) = iNext iRedim MiArreglo(10) ‘ redimenciona a 10 y OJO: se BORRAN los elementos

‘ existentesFor i=1 To 10 ‘ se inicializa el arreglo con 10 elementos

MiArreglo(i) = iNext iRedim Preserve MiArreglo(15) ‘ si no se quiere borrar los elementos, se usa la

‘ palabra “Preserve”Redim tiene distintos efectos dependiendo de la dimensión del arreglo (se verá más adelante).

INF-130 (UTFSM) Programación y TDG 13/21

Arrays

Redim

Page 14: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

Un vector es un arreglo de una dimensión, lo que es equivalente a una lista de elemento. Laforma explicada de definir un array previamente, es lo que se considera un vector.También es posible definir los valores de la siguiente manera:

Dim VectorNumeros As VariantVectorNumeros = Array(1,3,5)

Esto declara un tipo de dato por defecto, el cual es el Variant. En VBA se pueden declarar o nolas variables, y también se puede o no especificar su tipo de dato. Por defecto, si no se declaróla variable con el Dim, o no se colocó que tipo es (ej: As Integer), el intérprete asume que esVariant, el cual es equivalente a cualquier tipo existente. Para trabajar con Array(), se necesitaque sea de tipo Variant.Como no se conoce el tamaño del vector, para recorrer los elementos utilizaremos For Each.

En el siguiente ejemplo se verá una combinación de ambas maneras de crear arreglos.

INF-130 (UTFSM) Programación y TDG 14/21

Vectores y Matrices

Vector

Page 15: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

INF-130 (UTFSM) Programación y TDG 15/21

Vectores y Matrices

Vector

.

.

.

.

Page 16: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

Un vector es una matriz de 1 dimensión. Entendemosque la matriz puede contener desde 2 hasta másdimensiones. Visualmente, a un vector (Matriz 1D)lo podemos reprensetar así:

Una matriz 2D la podemos ver de esta forma:

El vector tiene 8 elementos, y la matriz tiene 8x4elementos. Dentro de cada casilla, se guardanlos elementos.Se dice que el vector tiene 1 índice, y una matriz 2Dtiene 2 índices.

INF-130 (UTFSM) Programación y TDG 16/21

Vectores y Matrices

Matriz

Page 17: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

Para declarar una matriz 2D en VBA:

Dim <Variable>(<M>,<N>) [As <tipo_de_dato>]

Donde [As <tipo_de_dato>] es opcional escribirlo.

Luego, se inicializan los valores haciendo la asignación:

<Variable>(<índice1>,<índice2>) = <valor_según_tipo_de_dato>

En el siguiente ejemplo se verá el llenado de una matriz y cómo se colocan los valores en las celdas de la hoja.

INF-130 (UTFSM) Programación y TDG 17/21

Vectores y Matrices

Matriz

Page 18: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

INF-130 (UTFSM) Programación y TDG 18/21

Vectores y Matrices

Matriz

En el ejemplo se define una matriz de (3,1)con 4x2 elementos. Luego se traspasan los datos a la Hoja “Euro” agrupando las

instrucciones con el With...End With.

Page 19: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

INF-130 (UTFSM) Programación y TDG 19/21

Transpose

Método Application.TransposeUn Matriz ATes la transpuesta de A si se cumple lo siguiente: un valor de la matriz A en la posición (i,j), en la matriz Transpuesta se encuentra en la posición (j,i). Ej:

En VBA se tiene el método Application.Transpose para obtener vectores transpuestos, es decir, se trabaja con Array().

Page 20: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

INF-130 (UTFSM) Programación y TDG 20/21

Transpose

Método Application.TransposeLa idea es obtener un vector vertical desde uno que es horizontal originalmente. Visualmente esto sería:

¿Para qué sirve hacer esto en Excel? Se utiliza para colocar valores en un determinado Rangevertical, dados unos valores especificados en un array(). Como los valores de un array() están en forma horizontal, hay que aplicarles un método para transponerlos.El uso del método:Range(<definir_rango_vertical>) = Application.Transpose(<vector_array>)

OJO: Se debe conocer el tamaño del vector para poder definir cuántas filas usará el range.

Page 21: 11.-Macros- Arreglos 1 - WordPress.comINF-130 (UTFSM) Programación y TDG 20/21 Transpose MétodoApplication.Transpose La idea es obtener un vector vertical desde uno que es horizontal

INF-130 (UTFSM) Programación y TDG 21/21

Transpose

Método Application.TransposeEjecuta el siguiente ejemplo desde la hoja (no desde VBA), para que puedas ver los cambios en las celdas. Recuerda llamar a la hoja “transponer”.

Para pensar:¿Por qué en el primer intento se colocan

solamente unos en la columna A?Comenten la respuesta.