P. 1
Macros de Ejemplo de Visual Basic Para Trabajar Con Matrices en Excel

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

|Views: 994|Likes:
Publicado porpepadiaz

More info:

Published by: pepadiaz on Apr 05, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

05/20/2014

pdf

text

original

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
  o o o   Resumen Más información Rellenar una matriz y copiarla en una hoja de cálculo Para tomar los valores de una hoja de cálculo y rellenar la matriz 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. 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 Módulo. Escriba el siguiente código en la hoja de módulo: 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 continuación, haga clic en Macros.

En el menú Archivo. seleccione Macro y. 18. 17. 11. myarray = Range("a1:a10"). Presione Alt+F11 para ejecutar el Editor de Visual Basic. 15. VBA. En el menú Herramientas. a continuación. Pasar y recibir una matriz 1. For i = 1 To UBound(myarray) 13. haga clic en Sheet_Fill_Array y. 17. a continuación. Seleccione Sheet1 y resalte el rango A1:A10. Abra un libro nuevo y escriba valores en las celdas A1:A10 de Sheet1. Next End Sub 15. haga clic en Pass_array y. En el cuadro de diálogo Macro. En el menú Archivo. haga clic en From_sheet_make_array y. 9. a continuación. En el cuadro de diálogo Macro. En el menú Insertar. Dim myarray As Variant 7. 20. MsgBox myarray(i. End Sub 10.Value 8. 16.Value 8. Sub receive_array(thisarray) 12. 10. 3. For i = 1 To UBound(myarray) 11. a continuación. En el menú Herramientas. Next 13. 18. Sub Pass_array() 6. Para tomar los valores de una hoja de cálculo y rellenar la matriz 1. 4. haga clic en Ejecutar 19. 16. haga clic en Cerrar y volver a Microsoft Excel. 3. End Sub 14. 'Looping structure to look at array. Sub From_sheet_make_array() 6. haga clic en Ejecutar. Abra un libro nuevo. haga clic en Módulo. 1) 12. 4. Escriba el siguiente código en la hoja de módulo: 5. Seleccione Sheet1. 2. receive_array myarray 9. 2. a continuación. Escriba el siguiente código en la hoja de módulo: 5. haga clic en Macros.13. 1) 14. haga clic en Ejecutar. myarray = Range("a1:a10"). En el cuadro de diálogo Macro. Presione Alt+F11 para ejecutar el Editor de Visual Basic. En el menú Insertar. seleccione Macro y. haga clic en Módulo. haga clic en Macros. MsgBox myarray(i. Más estructuras (VII) Arreglos (Vectores o Matrices) en VBA . Unidad 4. haga clic en Cerrar y volver a Microsoft Excel. Dim myarray As Variant 7.

DIM X(10). 34.4) X(2. Por esta razón. Todo tipo de arreglo usado en VBA debe ser declarado mediante la instrucción DIM 31. es más común el uso de arreglos uni y dimensionales. 30. AS Integer . X(10). Cuando el arreglo está agrupado por fila o columna se tiene un vector.1) X(2. las matrices. En términos de programación por computadora. 24. 5).. 23. X(2). Es un arreglo bidimensional de 2 files con 5 columnas.1) X(1.21. Matemáticamente los arreglos unidimensionales constituyen los vectores y los multidimensionales. mientras que está agrupado por un conjunto de filas y columna. El esquema anterior es una representación de dos tipos de objetos definidos como arreglos: lineales o cuadráticos. desde el punto de vista matemático. Ejemplo de declaración de arreglos 32. En VBA los arreglos tienen un nombre pues se consideran un tipo de variable. Y(10). tendremos Y(1). Sus elementos se designarán por X(1). En la declaración 35. Un Arreglo es un conjunto de valores agrupados como fila / columna o como fila y columna.5) (X(2. a los elementos de un arreglo se denotan de acuerdo al siguiente criterio: 28. Y(10) AS INTEGER 33. En el caso de Y. M(2). DIM Datos(80.2) X(1. 22. En este ejemplo se está declarando a X e Y como dos arreglos de tamaño 10 cada uno. se tiene una matriz.. 26. en algunos casos.3) X(1. Los arreglos pueden tener una o más dimensiones. M(1). En ambos casos se separan 10 localidades de memoria. Así como cada variable requiere de una localidad de memoria para almacenar su valor. 5) . M(10) corresponde a un arreglo lineal de 10 elementos X(1. 27. C(8. cada uno de los elementos del arreglo requieren de una localidad de memoria para almacenar su valor. así también.2) X(2. .3) X(2.4) (X(1. … . …. Y(2).5) 29. 25. los tridimensionales.

Usaremos FOR ::: NEXT para leer los datos y otro para imprimir los valores leídos. Dim Datos(10) As Integer 49. Supondremos que tiene 50 elementos. For I = 1 To 10 51. Next 53. the index value of each item. However. Escriba Un programa que lea un conjunto de 10 datos numéricos. usaremos For … Next para ingresar los datos repetidamente. We differentiate each item in the array by using subscript. Nota: 38. we need to declare only one array. we need to declare an array of variables instead of using a variable for each item. Ya que se trata de introducir 10 datos. MsgBox ("Estos son los datos leídos:") 55. Sub Arreglos01() 48. Aunque bien podríamos leer e imprimirlos dentro del mismo FOR … NEXT. Ejemplo 19 40. 43. End Sub 21. En este ejemplo el arreglo Datos tiene 80 elementos por fila y 5columas y el arreglo C contiene 8 filas y 5 columnas. MsgBox (Datos(I)) 57. For example. se estará usando un subíndice fuera de límite. La variable de conteo en el For será I. Datos(I) = InputBox("Ingrese el dato: ") 52. Next 58. 40 localidades. no será necesario definirla. los almacene en un arreglo unidimensional y luego los imprima. Usaremos a InputBox(…) como función para ingresar los datos 46. 44.36. Esto significa que los arreglos deben ser declarados tomando en cuenta su máximo tamaño. for example name (1). Solución 42. if we need to enter one hundred names. 39. se intenta usar el elemento X(11). For I = 1 To 10 56. if we have a list of items which are of similar type to deal with. En este caso. 41. name . instead of declaring one hundred different variables. ' Impresión de los datos 54. By definition. Si en el caso del arreglo X. an array is a group of variables with the same data type and name . El código es el siguiente: 47. ' Lectura de datos 50. 37. 45. para Datos se separan 400 localidades de memoria y para C. Usaremos la sentencia DIM para definir el arreglo como de tipo Integer.1 What is an Array? When we work with a single item. Sea Datos el nombre del arreglo. we only need to use one variable.

..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.In VBA. we define an array StudentName of five strings using the Dim keyword. we can have a one dimensional array.. 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) = StudentName(i) Next End Sub ** You can also declare the array using Dim StudentName(5) As String When we run the program. as shown below.. 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.Next loop to accept the input five times and display the five names from cell A1 to cell E1. .. name (3) ..(2). 21. We also use the For .. This input box will repeat five times and let the user enter five names.2 Declaring Arrays in Excel VBA We use Dim statement to declare an array just as the way we declare a single variable.. We include an InputBox to accept input from the user.1 In this example. two dimensional array or even a multidimensional array (up to 60) 21.etc. an input box will appear.

the student ID and then the student mark. In this example. separated by commas. The three input boxes and the output are shown below: . 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.2 You can also declare more than one array in a single line. The process will repeat three times until the particulars of all three students have been entered. 1) = StudentName(i) Cells(i. 2) = StudentID(i) Cells(i.The five names will be displayed in the spreadsheet as shown below: Example 21. we declare three arrays in a single line. Private Sub CommandButton1_Click( ) Dim StudentName(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. StudentID(3) As String.

3) as Integer will create a two dimension array consists of 16 elements.3) Score(2.1) Score(0.3) Score(1.0) Score(3. Data are usually organized and arranged in table form. in this tutorial. Dim Score (3.1) Score(1.2) Score(3. we are dealing only with the two dimensional array.0) Score(0.1) Score(2.2) Score(0. For example. 1). The format to declare a two dimensional array is Dim arrayName (num1. this is where the multidimensional arrays come into play. In the case when the Option Base is set to 1. However. 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. where one index represents the rows and the other index represent the columns.0) Score(1.21.2(b) Two Dimensional Array Multidimensional arrays are often needed when we are dealing with more complex database.2) Score(1.3) .0) Score(2. Two dimensional array can be represented by a table that contains rows and columns. especially those that handle large amount of data.2) Score(2.1) Score(3. These elements can be organized in a table form as shown in the table below: Score(0. 0) unless you set the Option Base to 1.3) Score(3. The suffixes of the element in the array will start with (0. then the suffixes of the element in the array will start with (1.

as shown below: After all the sales Volumes are entered. you can create a 5x2 array in Excel VBA. 2 to 3) as Single Dim SalesPerson as Integer.e from Score(1. denoted by a 5X 2 table in a spreadsheet. i. Day as Integer For SalesPerson=2 to 6 For Day=2 to3 SalesVolume(SalesPerson. 1 to 3) as Integer Example 21. Day)=inputbox("Enter Sales Volume") Cells(SalesPerson.If you set the option base to 1.Day) Next Day Next SalesPerson End Sub When the program is run. You can write the following VBA code: Private Sub CommandButton1_Click() Dim SalesVolume(2to 6. However. then there will be only 9 elements.1) to Score(3.1) you can also use the following format of declaration: Dim Score(1 to 3.3 If a company wants to track the performance of 5 salespersons over a period of 2 days.3). the values in the spreadsheet are shown below: . the inputbox that will prompt the user to enter sales volume will appear 10 times. Day)=SalesVolume(SalesPerson. if you want the first element to start with suffixes (1.

recordemos es un conjunto de elementos que tienen en común un nombre aunque entre ellos son diferentes. Si deseamos que comience en 1 en vez de en 0. La mayoría de los lenguajes de programación utilizan los arrays que. 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.4.3.7. en este caso consta de 12 elementos.8 y 9.If you need to make sure the user enters the correct sales volume. por defecto los subíndices de los arrays de VBA empiezan en 0 (que es el límite inferior de la matriz).2. Day) = InputBox("Enter Sales Volume of " & " SalesPerson " & (SalesPerson . 2011Deja un comentario Ya he hablado anteriormente de los arrays.1. 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. Cada uno de ellos irán referidos con un índice. ya que.6.1)) A clearer instruction will be shown as follows: Arrays dinámicos 31 julio. incluiremos antes del primer array y antes del primer procedimiento las expresión: Option Base 1 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 .1) & " Day " & (Day . Por ejemplo el array dígitos estaría compuesto por las cifras 0.5. you can change line 5 statement to SalesVolume(SalesPerson.

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 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” .

Presione Alt+F11 para ejecutar el Editor de Visual Basic. 2. Escriba el siguiente código en la hoja de módulo: Sub tabla_multiplicar() Dim i. 5. 1. Tal vez precisemos almacenar información para cada uno de los clientes acerca de su nombre. 3.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. Esto implicaría la declaración de una variable por cada concepto y por cada cliente. 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. Abra un libro nuevo. 3. 10) Range(“a1:a10″). En el menú Insertar. 2. es por tal motivo que recurrimos a las Matrices o Arrays. 7. 9. 6.Value = myarray Range(“a1:a10″).ColorIndex = 5 . Un array es un conjunto de datos del mismo tipo ordenados en forman líneal uno después de otro. 8. 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. 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. 4.Font. dirección. 4. j As Byte Dim myarray As Variant myarray = Array(1. edad. 2011Deja un comentario Supongamos que precisamos referenciar los datos de una cartera de clientes. apellidos.etc.WorksheetFunction. Además de la perdida de tiempo.Transpose(myarray) Range(“a1:j1″). haga clic en Módulo.Value = Application.

1) Next j Next i End Sub Como se habrá podido observar después de declarar dos variables byte. j) * Cells(i.   hace 5 años Notificar un abuso by Sergio N Miembro desde el . Agradecería muchísimo la explicación del código de visual basic. 7. Seguidamente hemos definido los elementos de nuestra matriz con la siguiente declaración: myarray = Array(1. la i y la j. 4. hemos declarado nuestra matriz con el nombre de “myarray” y tipo Variant.Value = Application. 9. 8.ColorIndex = 5 For i = 1 To 10 For j = 1 To 10 Cells(i. el hecho de declararlos de tipo Variante nos facilita mezclar elementos de diferente tipo e incluso incluir otras arrays. 5. 10) Con la siguiente línea invocamos una función de Excel la transposición de matrices. 2.Font. O sea intercambiar filas por columnas: Range(“a1:a10″).Transpose(myarray) Con ello conseguimos escribir en forma de columna nuestra matriz fila.Range(“a1:j1″). En principio todos los elmentos de un array deben ser del mismo tipo. 3. j) = Cells(1.WorksheetFunction. Matrices de excel para usar con visual basic? Quisiera saber como insertar una matriz de excel como variable de visual vasic tipo array. No se preocupe por ese fragmento de código lo entenderá cuando tratemos las estructuroas de decisión. 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. 6.

1)= matriz() .. y lo que quiero. El proceso se hacerlo.Value lo metes en un array de [10][2] i le meterá los valores q hay en las celdas.Elegida por la comunidad Range("A1:B10").. es por ejemplo. trabajar con vba mediante matrices para trabajar con un numero de datos importante y luego plasmar esos resultados en celdas.excel ye.public. Me explico un poco mejor.es. Utilizo el excel 2007. var nums(10)(2)=Range("A1:B10").Value autores en microsoft. mas o menos bien. 1 to 5) for i= 1 to 5 for j=1 to 5 matriz(n.24 junio 2006 Puntos totales: 955 (Nivel 2)   Añadir contacto Bloquear Mejor respuesta .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.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. Sub probar () dim matriz (1 to 5.@yeyda.

5). 1 To 5) For i = 1 To 5 For j = 1 To 5 Matriz(i.que con una sola orden ya lo hiciese. 'anonimo/a' ! deberas "igualar" las variables para las dimensiones de la matriz a las mismas por las que avanzan los bucles (p.Resize(5. no? Show trimmed content Héctor Miguel Acceder para responder 24/12/07 hola. pero al menos la idea creo que se capte. .e. Igual no me explico bien.como sigue: Sub Probar() Dim Matriz(1 To 5. j) = i * j Next Next Range("a1").Value = Matriz End Sub saludos.m)=i*j a: -> matriz(i.) de: -> matriz(n. lo siente.j)=i*j despues puedes hacer al pase "de un solo paso" +/.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->