Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

17
Macros de ejemplo de Visual Basic para trabajar con matrices en Excel Id. de artículo: 213798 - Ver los productos a los que se aplica este artículo Expandir todo | Contraer todo En esta página Resumen Más información o Rellenar una matriz y copiarla en una hoja de cálculo o Para tomar los valores de una hoja de cálculo y rellenar la matriz o Pasar y recibir una matriz Propiedades Propocionar comentarios <style>.tocTitle, #tocDiv{display: none;}</style> Resumen Este artículo contiene procedimientos de ejemplo de Microsoft Visual Basic para Aplicaciones que puede utilizar para trabajar con varios tipos de matrices. Volver al principio | Propocionar comentarios Más información Microsoft proporciona ejemplos de programación sólo como ilustración, sin ninguna garantía ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas. Rellenar una matriz y copiarla en una hoja de cálculo 1. Abra un libro nuevo. 2. Presione Alt+F11 para ejecutar el Editor de Visual Basic. 3. En el menú Insertar, haga clic en Módulo. 4. Escriba el siguiente código en la hoja de módulo: 5. Sub Sheet_Fill_Array()

Transcript of Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

Page 1: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

Macros de ejemplo de Visual Basic para trabajar con matrices en ExcelId. de artículo: 213798 - Ver los productos a los que se aplica este artículo

Expandir todo | Contraer todo

En esta página Resumen Más informacióno Rellenar una matriz y copiarla en una hoja de cálculoo Para tomar los valores de una hoja de cálculo y rellenar la matrizo Pasar y recibir una matriz Propiedades Propocionar comentarios

<style>.tocTitle, #tocDiv{display: none;}</style>

ResumenEste artículo contiene procedimientos de ejemplo de Microsoft Visual Basic para Aplicaciones que puede utilizar para trabajar con varios tipos de matrices.

Volver al principio | Propocionar comentarios

Más informaciónMicrosoft proporciona ejemplos de programación sólo como ilustración, sin ninguna garantía ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.

Rellenar una matriz y copiarla en una hoja de cálculo

1. Abra un libro nuevo.2. Presione Alt+F11 para ejecutar el Editor de Visual Basic.3. En el menú Insertar, haga clic en Módulo.4. Escriba el siguiente código en la hoja de módulo:5. Sub Sheet_Fill_Array()6. Dim myarray As Variant7. myarray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)8. Range("a1:a10").Value =

Application.WorksheetFunction.Transpose(myarray)9. End Sub

10. En el menú Archivo, haga clic en Cerrar y volver a Microsoft Excel.11. Seleccione Sheet1.12. En el menú Herramientas, seleccione Macro y, a continuación, haga

clic en Macros.13. En el cuadro de diálogo Macro, haga clic en Sheet_Fill_Array y, a

continuación, haga clic en Ejecutar.

Page 2: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

Para tomar los valores de una hoja de cálculo y rellenar la matriz

1. Abra un libro nuevo y escriba valores en las celdas A1:A10 de Sheet1.2. Presione Alt+F11 para ejecutar el Editor de Visual Basic.3. En el menú Insertar, haga clic en Módulo.4. Escriba el siguiente código en la hoja de módulo:5. Sub From_sheet_make_array()6. Dim myarray As Variant7. myarray = Range("a1:a10").Value8.9. 'Looping structure to look at array.10. For i = 1 To UBound(myarray)11. MsgBox myarray(i, 1)12. Next13. End Sub14.

15. En el menú Archivo, haga clic en Cerrar y volver a Microsoft Excel.16. Seleccione Sheet1.17. En el menú Herramientas, seleccione Macro y, a continuación, haga

clic en Macros.18. En el cuadro de diálogo Macro, haga clic en From_sheet_make_array

y, a continuación, haga clic en Ejecutar.

Pasar y recibir una matriz

1. Abra un libro nuevo.2. Presione Alt+F11 para ejecutar el Editor de Visual Basic.3. En el menú Insertar, haga clic en Módulo.4. Escriba el siguiente código en la hoja de módulo:5. Sub Pass_array()6. Dim myarray As Variant7. myarray = Range("a1:a10").Value8. receive_array myarray9. End Sub10.11. Sub receive_array(thisarray)12. For i = 1 To UBound(myarray)13. MsgBox myarray(i, 1)14. Next

End Sub

15. En el menú Archivo, haga clic en Cerrar y volver a Microsoft Excel.16. Seleccione Sheet1 y resalte el rango A1:A10.17. En el menú Herramientas, seleccione Macro y, a continuación, haga

clic en Macros.18. En el cuadro de diálogo Macro, haga clic en Pass_array y, a

continuación, haga clic en Ejecutar

19. Unidad 4. VBA. Más estructuras (VII)20. Arreglos (Vectores o Matrices) en VBA

21. Un Arreglo es un conjunto de valores agrupados como fila / columna o como fila y

columna.

Page 3: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

22.

23. Cuando el arreglo está agrupado por fila o columna se tiene un vector, desde el

punto de vista matemático, mientras que está agrupado por un conjunto de filas y

columna, se tiene una matriz.

24. El esquema anterior es una representación de dos tipos de objetos definidos como

arreglos: lineales o cuadráticos.

25. Los arreglos pueden tener una o más dimensiones. Matemáticamente los arreglos

unidimensionales constituyen los vectores y los multidimensionales, las matrices.

26. En términos de programación por computadora, es más común el uso de arreglos

uni y dimensionales, en algunos casos, los tridimensionales.

27. En VBA los arreglos tienen un nombre pues se consideran un tipo de variable. Así

como cada variable requiere de una localidad de memoria para almacenar su valor,

así también, cada uno de los elementos del arreglo requieren de una localidad de

memoria para almacenar su valor. Por esta razón, a los elementos de un arreglo se

denotan de acuerdo al siguiente criterio:

28. M(1), M(2), … , M(10) corresponde a un arreglo lineal de 10 elementos

X(1,1) X(1,2) X(1,3) X(1,4) (X(1,5)

X(2,1) X(2,2) X(2,3) X(2,4) (X(2,5)

29. Es un arreglo bidimensional de 2 files con 5 columnas.

30. Todo tipo de arreglo usado en VBA debe ser declarado mediante la instrucción DIM

31. Ejemplo de declaración de arreglos

32. DIM X(10), Y(10) AS INTEGER

33. En este ejemplo se está declarando a X e Y como dos arreglos de tamaño 10 cada

uno. Sus elementos se designarán por X(1), X(2), …, X(10), En el caso de Y,

tendremos Y(1), Y(2), .., Y(10). En ambos casos se separan 10 localidades de

memoria.

34. En la declaración

35. DIM Datos(80, 5), C(8, 5) , AS Integer

36. En este ejemplo el arreglo Datos tiene 80 elementos por fila y 5columas y el arreglo

C contiene 8 filas y 5 columnas. En este caso, para Datos se separan 400

localidades de memoria y para C, 40 localidades.

Page 4: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

37. Nota:

38. Si en el caso del arreglo X, se intenta usar el elemento X(11), se estará usando un

subíndice fuera de límite. Esto significa que los arreglos deben ser declarados

tomando en cuenta su máximo tamaño.

39. Ejemplo 19

40. Escriba Un programa que lea un conjunto de 10 datos numéricos, los almacene en

un arreglo unidimensional y luego los imprima.

41. Solución

42. Sea Datos el nombre del arreglo. Supondremos que tiene 50 elementos. Usaremos

la sentencia DIM para definir el arreglo como de tipo Integer.

43. Ya que se trata de introducir 10 datos, usaremos For … Next para ingresar los datos

repetidamente. La variable de conteo en el For será I, no será necesario definirla.

44. Usaremos FOR ::: NEXT para leer los datos y otro para imprimir los valores leídos.

Aunque bien podríamos leer e imprimirlos dentro del mismo FOR … NEXT.

45. Usaremos a InputBox(…) como función para ingresar los datos

46. El código es el siguiente:

47. Sub Arreglos01()

48. Dim Datos(10) As Integer

49. ' Lectura de datos

50. For I = 1 To 10

51. Datos(I) = InputBox("Ingrese el dato: ")

52. Next

53. ' Impresión de los datos

54. MsgBox ("Estos son los datos leídos:")

55. For I = 1 To 10

56. MsgBox (Datos(I))

57. Next

58. End Sub

21.1 What is an Array?

When we work with a single item, we only need to use one variable. However, if we have a

list of items which are of similar type to deal with, we need to declare an array of variables

instead of using a variable for each item. For example, if we need to enter one hundred

names, instead of declaring one hundred different variables, we need to declare only one

array. By definition, an array is a group of variables with the same data type and name.

We differentiate each item in the array by using subscript, the index value of each item, for

example name (1), name (2), name (3) .......etc.

Page 5: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

21.2 Declaring Arrays in Excel VBA

We use Dim statement to declare an array just as the way we declare a single variable.In

VBA, we can have a one dimensional array, two dimensional array or even a

multidimensional array (up to 60)

21.2(a) One Dimensional Array

The general format to declare a one dimensional array in Excel VBA is as follows:

Dim arrayName(index) as dataType or

Dim arrayName(first index to last index) as dataType

For example,

Dim StudentName(10) as String

Dim StudentName(1 to 10) as String

Dim StudentMark(10) as Single

Dim StudentMark( 1 to 10) as Single

Example 21.1

In this example, we define an array StudentName of five strings using the Dim keyword. We

include an InputBox to accept input from the user. We also use the For ...Next loop to accept

the input five times and display the five names from cell A1 to cell E1. The code is as

follows:

Private Sub CommandButton1_Click( )

Dim StudentName(1 to 5) As String

For i = 1 To 5

StudentName(i) = InputBox("Enter student Name")

Cells(i, 1) = StudentName(i)

Next

End Sub

** You can also declare the array using Dim StudentName(5) As String

When we run the program, an input box will appear, as shown below. This input box will

repeat five times and let the user enter five names.

Page 6: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

The five names will be displayed in the spreadsheet as shown below:

Example 21.2

You can also declare more than one array in a single line. In this example, we declare three

arrays in a single line, separated by commas.

Private Sub CommandButton1_Click( )

Dim StudentName(3) As String, StudentID(3) As String, StudentMark(3) As Single

For i = 1 To 3

StudentName(i) = InputBox("Enter student Name")

StudentID(i) = InputBox("Enter student ID")

StudentMark(i) = InputBox("Enter student Mark")

Cells(i, 1) = StudentName(i)

Cells(i, 2) = StudentID(i)

Cells(i, 3) = StudentMark(i)

Next

End Sub

When we run the program, three input boxes will appear consecutively to let the user enter

the student name, the student ID and then the student mark. The process will repeat three

times until the particulars of all three students have been entered. The three input boxes and

the output are shown below:

Page 7: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

21.2(b) Two Dimensional Array

Multidimensional arrays are often needed when we are dealing with more complex

database, especially those that handle large amount of data. Data are usually organized and

arranged in table form, this is where the multidimensional arrays come into play. However, in

this tutorial, we are dealing only with the two dimensional array. Two dimensional array can

be represented by a table that contains rows and columns, where one index represents the

rows and the other index represent the columns.

The format to declare a two dimensional array is

Dim arrayName (num1, num2) as datatype

Where num1 is the suffix of the first dimension of the last element and num2 is the suffix of

the second dimension of the last element in the array. The suffixes of the element in the

array will start with (0, 0) unless you set the Option Base to 1. In the case when the Option

Base is set to 1, then the suffixes of the element in the array will start with (1, 1). For

example,

Dim Score (3, 3) as Integer

will create a two dimension array consists of 16 elements. These elements can be organized

in a table form as shown in the table below:

Score(0,0) Score(0,1) Score(0,2)Score(0,3

)

Score(1,0) Score(1,1) Score(1,2)Score(1,3

)

Score(2,0) Score(2,1) Score(2,2) Score(2,3

Page 8: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

)

Score(3,0) Score(3,1) Score(3,2)Score(3,3

)

If you set the option base to 1, then there will be only 9 elements, i.e from Score(1,1) to

Score(3,3). However, if you want the first element to start with suffixes (1,1) you can also

use the following format of declaration:

Dim Score(1 to 3, 1 to 3) as Integer

Example 21.3

If a company wants to track the performance of 5 salespersons over a period of 2 days, you

can create a 5x2 array in Excel VBA, denoted by a 5X 2 table in a spreadsheet.

You can write the following VBA code:

Private Sub CommandButton1_Click()

Dim SalesVolume(2to 6, 2 to 3) as Single

Dim SalesPerson as Integer, Day as Integer

For SalesPerson=2 to 6

For Day=2 to3

SalesVolume(SalesPerson, Day)=inputbox("Enter Sales Volume")

Cells(SalesPerson, Day)=SalesVolume(SalesPerson,Day)

Next Day

Next SalesPerson

End Sub

When the program is run, the inputbox that will prompt the user to enter sales volume will

appear 10 times, as shown below:

After all the sales Volumes are entered, the values in the spreadsheet are shown below:

Page 9: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

If you need to make sure the user enters the correct sales volume, you can change line 5

statement to

SalesVolume(SalesPerson, Day) = InputBox("Enter Sales Volume of " & " SalesPerson " &

(SalesPerson - 1) & " Day " & (Day - 1))

A clearer instruction will be shown as follows:

Arrays dinámicos

31 julio, 2011Deja un comentario

Ya he hablado anteriormente de los arrays. La mayoría de los lenguajes de

programación utilizan los arrays que, recordemos es un conjunto de elementos que

tienen en común un nombre aunque entre ellos son diferentes. Por ejemplo el array

dígitos estaría compuesto por las cifras 0,1,2,3,4,5,6,7,8 y 9. Cada uno de ellos irán

referidos con un índice. Así supongamos el array compuesto por los meses del año:

Al tratarse de un número de elementos fijo estaríamos hablando de un array estático que, en este caso consta de 12 elementos.

Antes de empezar a programar con ellos necesitamos declararlos

Dim meses(11) as byte

Podrá observar que entre paréntesis he colocado 11 y no 12, ya que, por defecto los subíndices de los arrays de VBA empiezan en 0 (que es el límite inferior de la matriz). Si deseamos que comience en 1 en vez de en 0, incluiremos antes del primer array y antes del primer procedimiento las expresión:

Option Base 1

Page 10: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

Ahora bien ¿que haríamos si no conociéramos de antemano la dimensión de

nuestra array? Para ello podemos declarar un array dinámico dejando el paréntesis

en blanco en la sentencia Dim:

Dim miArray( ) as Double

Una vez que conozcamos el número de elementos que necesitamos usaremos la

sentencia Redim para señalar el número de subíndices necesarios. Por ejemplo:

Redim mi Array(102)

Veamos un ejemplo sencillo para entender los conceptos mencionados:

Vamos a declarar una matriz unidimensional de 3 elementos compuesto por los

tres primeros dias de la semana, y haremos que no los presente por pantalla:

Option Explicit

Sub asignandoarray()

Dim miArray(3) As String

miArray(0) = “lunes”

miArray(1) = “martes”

miArray(2) = “miércoles”

MsgBox miArray(0) & ” ” & miArray(1) & ” ” & miArray(2)

End Sub

Ahora redimensionaremos el array para introducir el jueves y el viernes:

Sub redimarray()

‘Voy a redimensionar la array anterior para incluir el jueves y el viernes

ReDim miArray(5)

miArray(0) = “lunes”

miArray(1) = “martes”

miArray(2) = “miércoles”

miArray(3) = “jueves”

miArray(4) = “viernes”

MsgBox miArray(0) & ” ” & miArray(1) & ” ” & miArray(2) & ” ” &

miArray(3) & ” ” & miArray(4)

End Sub

Page 11: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

Si deseamos no tener que volver a escribir el mismo procedimiento podemos

incluir datos con la expresión Redim preserve(el número siguiente en el índice)

Sub asignandoarray2()

ReDim miArray(3)

miArray(0) = “lunes”

miArray(1) = “martes”

miArray(2) = “miércoles”

ReDim Preserve miArray(3)

miArray(3) = “jueves”

MsgBox miArray(0) & ” ” & miArray(1) & ” ” & miArray(2) & ” ” & miArray(3)

End Sub

Archivado en Arrays

Arrays

26 julio, 2011Deja un comentario

Supongamos que precisamos referenciar los datos de una cartera de clientes. Tal

vez precisemos almacenar información para cada uno de los clientes acerca de su

nombre, apellidos, dirección, edad,etc. Esto implicaría la declaración de una

variable por cada concepto y por cada cliente. Además de la perdida de tiempo, es

por tal motivo que recurrimos a las Matrices o Arrays.

Un array es un conjunto de datos del mismo tipo ordenados en forman líneal uno

después de otro. Los componentes de un array se han de referenciar por medio del

nombre del array y un índice de desplazamiento para indicar el componente

deseado.

Como ejemplo práctico vamos a realizar este sencillo ejercicio que va a consistir

en obtener los productos cruzados de los primeros 10 números naturales. Para ello

vamos a realizar una macro que nos escriba los 10 primeros números en la fila 1 y

en la columna A para después efectúar el producto.

1. Abra un libro nuevo.2. Presione Alt+F11 para ejecutar el Editor de Visual Basic.3. En el menú Insertar, haga clic en Módulo.4. Escriba el siguiente código en la hoja de módulo:

Sub tabla_multiplicar()

Dim i, j As Byte

Page 12: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

Dim myarray As Variant

myarray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

Range(“a1:a10″).Value = Application.WorksheetFunction.Transpose(myarray)

Range(“a1:j1″).Value = myarray

Range(“a1:a10″).Font.ColorIndex = 5

Range(“a1:j1″).Font.ColorIndex = 5

For i = 1 To 10

For j = 1 To 10

Cells(i, j) = Cells(1, j) * Cells(i, 1)

Next j

Next i

End Sub

Como se habrá podido observar después de declarar dos variables byte, la i y la j,

hemos declarado nuestra matriz con el nombre de “myarray” y tipo Variant. En

principio todos los elmentos de un array deben ser del mismo tipo, el hecho de

declararlos de tipo Variante nos facilita mezclar elementos de diferente tipo e

incluso incluir otras arrays. Seguidamente hemos definido los elementos de nuestra

matriz con la siguiente declaración:

myarray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

Con la siguiente línea invocamos una función de Excel la transposición de

matrices. O sea intercambiar filas por columnas:

Range(“a1:a10″).Value = Application.WorksheetFunction.Transpose(myarray)

Con ello conseguimos escribir en forma de columna nuestra matriz fila. A

continuación insertamos los valores de la misma matriz en la fila 1

Range(“a1:j1″).Value = myarray

Formateamos un poco dándole color azul a la fuentes de la 1 fila y columna y

después insertamos un bucle para efectúar los productos cruzados. No se preocupe

por ese fragmento de código lo entenderá cuando tratemos las estructuroas de

decisión.

Matrices de excel para usar con visual basic?

Quisiera saber como insertar una matriz de excel como variable de visual vasic tipo array. Agradecería muchísimo la explicación del código de visual basic.

hace 5 años

Page 13: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

Notificar un abuso

by Sergio NMiembro desde el

24 junio 2006

Puntos totales:

955 (Nivel 2)

Añadir contacto Bloquear

Mejor respuesta - Elegida por la comunidadRange("A1:B10").Value

lo metes en un array de [10][2] i le meterá los valores q hay en las celdas.

var nums(10)(2)=Range("A1:B10").Value

autores en microsoft.public.es.excel

[email protected] Acceder para responder

23/12/07El caso es que me preguntaba si existe alguna forma mas sencilla de pasar los datos de una matriz a un rango de excel. Me explico un poco mejor. Utilizo el excel 2007, y lo que quiero, es por ejemplo, trabajar con vba mediante matrices para trabajar con un numero de datos importante y luego plasmar esos resultados en celdas.

El proceso se hacerlo, mas o menos bien.

Sub probar ()

dim matriz (1 to 5, 1 to 5)

for i= 1 to 5

for j=1 to 5matriz(n,m)=i*jnext jnext i

bueno mas o menos

Page 14: Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

el caso es que no queria hacer otro bucle para colocar los datos en la hoja

querria saber si existe alguna forma mas sencilla de hacer esto sin bucle de nuevo

algo como cells(1,1)= matriz()

que con una sola orden ya lo hiciese.

Igual no me explico bien, lo siente, pero al menos la idea creo que se capte, no?

Show trimmed content Héctor Miguel Acceder para

responder

24/12/07hola, 'anonimo/a' !

deberas "igualar" las variables para las dimensiones de la matriz a las mismas por las que avanzan los bucles (p.e.)de: -> matriz(n,m)=i*ja: -> matriz(i,j)=i*j

despues puedes hacer al pase "de un solo paso" +/- como sigue:

Sub Probar()Dim Matriz(1 To 5, 1 To 5)For i = 1 To 5For j = 1 To 5Matriz(i, j) = i * jNextNextRange("a1").Resize(5, 5).Value = MatrizEnd Sub

saludos,