Programación General > VBA
Copiar Valores De Un Array A Un Rango De Celdas
(1/1)
mikelvba1:
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:
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 ---Sub TestArray_2() Dim n As Integer, f As Integer, MiMatriz(1 To 10, 1 To 10) As Integer Columns.Clear For n = 1 To 10 For f = 1 To 10 MiMatriz(n, f) = n * f Next Next Range("a1:j10").Value = MiMatrizEnd Sub
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:
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:
--- 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.
--- Fin de la cita ---
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 ---Range("a2:a7").Value = matriz
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 ---Range("a1:g1") = Array("Titulo_1", "Titulo_2", "Titulo_3", "Titulo_4", _ "Titulo_5", "Titulo_6", "Titulo_7")
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 ---Range("a1:a7") = Array("Titulo_1", "Titulo_2", "Titulo_3", "Titulo_4", _ "Titulo_5", "Titulo_6", "Titulo_7")
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 ---Range("a1:d2")=Matriz
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 ---Range("a1:b4")=Matriz
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.
--- Fin de la cita ---
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
Navegación
Ir a la versión completa