• Lunes 29 de Abril de 2024, 02:41

Autor Tema:  Copiar Valores De Un Array A Un Rango De Celdas  (Leído 12815 veces)

mikelvba1

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Copiar Valores De Un Array A Un Rango De Celdas
« en: Jueves 20 de Septiembre de 2007, 12:16 »
0
Hola a todos,



Pues eso,  necesito saber como puedo hacer lo siguiente

1)tengo una array de una dimension
2)selecciono un rango de celdas
3)introduzco:

Range("a2:a7").Value = matriz

4) en teoria me copia los valores del array a la hoja activa

Hasta aqui bien, pero si mi matriz es de dimension 3 y por ejemplo solo quiero listar los valores de la dimension 3 en una fila o columna, como podria hacerlo?

Range("a2:a7").Value = ??? matriz(dimension 3)????

Se puede hacer con  for next y todo eso, pero me interesa saber si se puede hacer con un solo comando.
Igual no se puede pero gracias a todos de todas formas

Ivanart

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Copiar Valores De Un Array A Un Rango De Celdas
« Respuesta #1 en: Jueves 20 de Septiembre de 2007, 23:03 »
0
hola de nuevo, Mikel

no me hagas mucho caso, pues la verdad es que las matrices no son mi fuerte, pero tu consulta me ha picado el gusanillo

a mi, desde mi ignorancia me da la impresion de que lo que buscas , sin bucles no es posible, sobre todo porque al menos yo no conozco una forma de hacer referencia a una sola de las dimensiones sin 'involucrar' al menos un elemento de las otras

la verdad es que si existe tal forma (¿una especie de indice?) estaria encantado si me la comentas/ais, pues ya te digo que no controlo apenas sobre matrices

aparte, y solo por un poco de logica, el excel llamemosle visual, me da la impresion de que funciona en dos dimensiones (filas,columnas) que son las que puede llegar a equipar a los datos de una matriz, supongo que con la 3ª, como tal dimension, no sabe que hacer

a lo que parece que si se puede llegar es a cargar matrices bidimensionales en un rango equivalente de celdas

 (aunque no es tu duda y quizas ya lo sepas [yo acabo de descubrirlo probando para tu consulta , pues hasta ahora solo habia aplicado la forma que comentas con unidimensionales y sobre todo mediante la funcion array])

este es el codigo para esa prueba:

Código: Text
  1. Sub TestArray_2()
  2.   Dim n As Integer, f As Integer, MiMatriz(1 To 10, 1 To 10) As Integer
  3.    Columns.Clear
  4.    For n = 1 To 10
  5.     For f = 1 To 10
  6.         MiMatriz(n, f) = n * f
  7.     Next
  8.   Next
  9.   Range("a1:j10").Value = MiMatriz
  10. End Sub
  11.  

aun asi me da la impresion que cargar una sola de las 2 dimensiones sin bucles tampoco debe ser posible

bueno, no se si te servira de algo, pues es sobre todo una opinion/percepcion, que lo mismo es totalmente erronea.

si por lo que fuera descubres algo al respecto, yo por mi parte estaria encantado si lo pusieras por aqui mismo

un saludo
Ivan

mikelvba1

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Copiar Valores De Un Array A Un Rango De Celdas
« Respuesta #2 en: Viernes 21 de Septiembre de 2007, 08:15 »
0
Hola Ivan,


Pues hasta donde he podido averiguar, con la expresion que comentaba:

Range("a2:a7").Value = matriz

Se asignan los valores del rango seleccionado a una matriz bidimensional que corresponde a las filas y las columnas de cada elemento y me parece que si declaras la matriz AS VARIANT no necesitas usar REDIM o REDIM PRESERVE antes de utilizarla.



Tengo un par de manuales en que desarrolla un poco el tema, si quieres que te lo envie, me dices y hacemos un apaño.

Ivanart

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Copiar Valores De Un Array A Un Rango De Celdas
« Respuesta #3 en: Viernes 21 de Septiembre de 2007, 22:32 »
0
Cita de: "mikelvba1"
Hola Ivan,


Pues hasta donde he podido averiguar, con la expresion que comentaba:

Range("a2:a7").Value = matriz

Se asignan los valores del rango seleccionado a una matriz bidimensional que corresponde a las filas y las columnas de cada elemento y me parece que si declaras la matriz AS VARIANT no necesitas usar REDIM o REDIM PRESERVE antes de utilizarla.



Tengo un par de manuales en que desarrolla un poco el tema, si quieres que te lo envie, me dices y hacemos un apaño.
hola Mikell

lo 1º muchas gracias, y te comento un poco algunas de las conclusiones/especulaciones a las que voy llegando con mis pruebas:

la verdad es que esta forma:

Código: Text
  1. Range("a2:a7").Value = matriz
  2.  

aunque la suelo utilizar con la funcion Array ( te la expongo por si no conoces el uso, por que realmente es muy util en ocasiones, pej: para poner los titulos de columna en una nueva hoja,...)

Código: Text
  1. Range("a1:g1") = Array("Titulo_1", "Titulo_2", "Titulo_3", "Titulo_4", _
  2.                           "Titulo_5", "Titulo_6", "Titulo_7")
  3.  

el tema es que realmente me da la impresion de que siempre asigna la 1ª dimension a la fila y la 2ª a la columna, aunque intenes asignarsela al reves

 pej si pruebas este mismo ej. con el rango ("a1:a7"), te rellena las celdas, paro todas con el 1er elemento de la matriz (Titulo_1 en este caso))

Código: Text
  1. Range("a1:a7") = Array("Titulo_1", "Titulo_2", "Titulo_3", "Titulo_4", _
  2.                           "Titulo_5", "Titulo_6", "Titulo_7")
  3.  

sin embargo con las bidimensionales si te rellena filas y columnas, pero igualmente, si pej. tienes esta matriz de 2 dimensiones =>

dim Matriz(2,4)

esto te devolveria un resultado correcto (para un rango con 2 filas y 4 columnas=>

Código: Text
  1. Range("a1:d2")=Matriz
  2.  

pero si lo intentas a la inversa, es decir con 4 filas y 2 columnas, aunque el nº de elmentos sea = al de celdas, solo te rellenara las celdas de las 2 primeras filas, pej. asi

Código: Text
  1. Range("a1:b4")=Matriz
  2.  

en fin, como ves, creo que a la hora de introducir datos en una hoja, excel no sabria que hacer con la 3ª dimension (otra cosa quizas sea con las tablas dinamicas, cubos, y ...)

ya te digo que es mas una apreciacion que conocimiento, y en cuanto a esto=>

Citar
Tengo un par de manuales en que desarrolla un poco el tema, si quieres que te lo envie, me dices y hacemos un apaño.

si tratan sobre el tema de las matrices estare encantado si me los puedes enviar

esteEsMiEmilio=> lombocQuitaArrobaEstotelelinePuntoEs

yo tambien creo que engo por ahi algun que otro manual de vba, y en su defecto, supongo que tendre los vinculos a su origen

un saludo
ivan