Sie sind auf Seite 1von 14

Macros de ejemplo de Visual Basic para trabajar con matrices en Excel

Id. de artculo: 213798 - Ver los productos a los que se aplica este artculo

Expandir todo | Contraer todo

En esta pgina
o o o Resumen Ms informacin Rellenar una matriz y copiarla en una hoja de clculo Para tomar los valores de una hoja de clculo y rellenar la matriz Pasar y recibir una matriz Propiedades Propocionar comentarios

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

Resumen
Este artculo 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

Ms informacin
Microsoft proporciona ejemplos de programacin slo como ilustracin, sin ninguna garanta ya sea expresa o implcita. Esto incluye, entre otras, las garantas implcitas de comerciabilidad e idoneidad para un fin determinado. En este artculo se da por supuesto que ya conoce el lenguaje de programacin que se muestra, as como las herramientas empleadas para crear y depurar procedimientos. Los ingenieros de soporte tcnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarn estos ejemplos para ofrecer mayor funcionalidad ni crearn procedimientos adaptados a sus necesidades especficas.

Rellenar una matriz y copiarla en una hoja de clculo


1. 2. 3. 4. 5. 6. 7. 8. Abra un libro nuevo. Presione Alt+F11 para ejecutar el Editor de Visual Basic. En el men Insertar, haga clic en Mdulo. Escriba el siguiente cdigo en la hoja de mdulo: Sub Sheet_Fill_Array() Dim myarray As Variant myarray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 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 continuacin, haga clic en Macros.

13. En el cuadro de dilogo Macro, haga clic en Sheet_Fill_Array y, a continuacin, haga clic en Ejecutar.

Para tomar los valores de una hoja de clculo 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 Mdulo. 4. Escriba el siguiente cdigo en la hoja de mdulo: 5. Sub From_sheet_make_array() 6. Dim myarray As Variant 7. myarray = Range("a1:a10").Value 8. 9. 'Looping structure to look at array. 10. For i = 1 To UBound(myarray) 11. MsgBox myarray(i, 1) 12. Next 13. End Sub 14. 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 continuacin, haga clic en Macros. 18. En el cuadro de dilogo Macro, haga clic en From_sheet_make_array y, a continuacin, 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 Mdulo. 4. Escriba el siguiente cdigo en la hoja de mdulo: 5. Sub Pass_array() 6. Dim myarray As Variant 7. myarray = Range("a1:a10").Value 8. receive_array myarray 9. End Sub 10. 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 continuacin, haga clic en Macros. 18. En el cuadro de dilogo Macro, haga clic en Pass_array y, a continuacin, haga clic en Ejecutar

19.
20.

Unidad 4. VBA. Ms estructuras (VII)


Arreglos (Vectores o Matrices) en VBA

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

22. 23. Cuando el arreglo est agrupado por fila o columna se tiene un vector, desde el punto de vista matemtico, mientras que est agrupado por un conjunto de filas y columna, se tiene una matriz. 24. El esquema anterior es una representacin de dos tipos de objetos definidos como arreglos: lineales o cuadrticos. 25. Los arreglos pueden tener una o ms dimensiones. Matemticamente los arreglos unidimensionales constituyen los vectores y los multidimensionales, las matrices. 26. En trminos de programacin por computadora, es ms comn 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 tambin, cada uno de los elementos del arreglo requieren de una localidad de memoria para almacenar su valor. Por esta razn, 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(2,1) X(1,2) X(2,2) X(1,3) X(2,3) X(1,4) X(2,4) (X(1,5) (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 instruccin DIM 31. Ejemplo de declaracin 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 tamao 10 cada uno. Sus elementos se designarn 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 declaracin 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. 37. Nota: 38. Si en el caso del arreglo X, se intenta usar el elemento X(11), se estar usando un subndice fuera de lmite. Esto significa que los arreglos deben ser declarados tomando en cuenta su mximo tamao. 39. Ejemplo 19 40. Escriba Un programa que lea un conjunto de 10 datos numricos, los almacene en un arreglo unidimensional y luego los imprima. 41. Solucin 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 ledos. Aunque bien podramos leer e imprimirlos dentro del mismo FOR NEXT. 45. Usaremos a InputBox() como funcin para ingresar los datos 46. El cdigo 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. ' Impresin de los datos 54. MsgBox ("Estos son los datos ledos:") 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.

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.

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:

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(1,0) Score(2,0) Score(3,0) Score(0,1) Score(1,1) Score(2,1) Score(3,1) Score(0,2) Score(1,2) Score(2,2) Score(3,2) Score(0,3) Score(1,3) Score(2,3) 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:

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 dinmicos
31 julio, 2011Deja un comentario Ya he hablado anteriormente de los arrays. La mayora de los lenguajes de programacin utilizan los arrays que, recordemos es un conjunto de elementos que tienen en comn un nombre aunque entre ellos son diferentes. Por ejemplo el array dgitos estara compuesto por las cifras 0,1,2,3,4,5,6,7,8 y 9. Cada uno de ellos irn referidos con un ndice. As supongamos el array compuesto por los meses del ao:

Al tratarse de un nmero de elementos fijo estaramos hablando de un array esttico 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 parntesis he colocado 11 y no 12, ya que, por defecto los subndices de los arrays de VBA empiezan en 0 (que es el lmite 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 expresin:

Option Base 1 Ahora bien que haramos si no conociramos de antemano la dimensin de nuestra array? Para ello podemos declarar un array dinmico dejando el parntesis en blanco en la sentencia Dim: Dim miArray( ) as Double

Una vez que conozcamos el nmero de elementos que necesitamos usaremos la sentencia Redim para sealar el nmero de subndices 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) = mircoles 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) = mircoles miArray(3) = jueves miArray(4) = viernes MsgBox miArray(0) & & miArray(1) & & miArray(2) & & miArray(3) & & miArray(4) End Sub Si deseamos no tener que volver a escribir el mismo procedimiento podemos incluir datos con la expresin Redim preserve(el nmero siguiente en el ndice) Sub asignandoarray2() ReDim miArray(3) miArray(0) = lunes

miArray(1) = martes miArray(2) = mircoles 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 informacin para cada uno de los clientes acerca de su nombre, apellidos, direccin, edad,etc. Esto implicara la declaracin de una variable por cada concepto y por cada cliente. Adems 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 lneal uno despus 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 prctico vamos a realizar este sencillo ejercicio que va a consistir en obtener los productos cruzados de los primeros 10 nmeros naturales. Para ello vamos a realizar una macro que nos escriba los 10 primeros nmeros en la fila 1 y en la columna A para despus efectar el producto.
1. 2. 3. 4. Abra un libro nuevo. Presione Alt+F11 para ejecutar el Editor de Visual Basic. En el men Insertar, haga clic en Mdulo. Escriba el siguiente cdigo en la hoja de mdulo:

Sub tabla_multiplicar() Dim i, j As Byte 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 despus 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 declaracin: myarray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Con la siguiente lnea invocamos una funcin de Excel la transposicin 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 continuacin insertamos los valores de la misma matriz en la fila 1 Range(a1:j1).Value = myarray Formateamos un poco dndole color azul a la fuentes de la 1 fila y columna y despus insertamos un bucle para efectar los productos cruzados. No se preocupe por ese fragmento de cdigo lo entender cuando tratemos las estructuroas de decisin.

Matrices de excel para usar con visual basic?


Quisiera saber como insertar una matriz de excel como variable de visual vasic tipo array. Agradecera muchsimo la explicacin del cdigo de visual basic.

hace 5 aos Notificar un abuso

by Sergio N Miembro desde el

24 junio 2006 Puntos totales: 955 (Nivel 2)


Aadir contacto Bloquear

Mejor respuesta - Elegida por la comunidad


Range("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 ye...@yeyda.com Acceder para responder 23/12/07 El 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 5 matriz(n,m)=i*j next j next i

bueno mas o menos 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 Hctor Miguel Acceder para responder 24/12/07 hola, '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*j a: -> 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 5 For j = 1 To 5 Matriz(i, j) = i * j Next Next Range("a1").Resize(5, 5).Value = Matriz End Sub saludos,

Das könnte Ihnen auch gefallen