Discussion:
Asignar rangos a matrices
(demasiado antiguo para responder)
Findeo
2006-10-19 10:21:01 UTC
Permalink
Buenos días a todos.
Estoy volviendome un poco loco, pues creo que lo he visto en algún sitio,
pero no consigo encontrarlo.
Mi problema es el siguiente:
En VBA quisiera poder asignar los valores de las celdas de un rango
(consecutivo) a una matriz, pero sin entrar en un bucle. ¿Es posible hacerlo?

Es decir, por ejemplo, las celdas A1...E1 contienen los valores que quisiera
que se recogieran en una matriz llamada Nivel, de tal modo que Nivel(1)=A1,
Nivel(2)=B1, ..., Nivel(5)=E1 y que se pudiera hacer la asignación mediante
una instrucción, algo así como Nivel(.¿?.)=Range("A1:E1").Value

Por otro lado, tampoco se si puedo utilizar un Nombre, que se defina en VBA,
que contenga esos mismos valores, y, haciendo algo como lo expuesto
anteriormente, asignar esos valores al nombre (el nombre sería también una
variable matricial, pero disponible en la hoja de calculo)

Todo esto viene a cuento, porque los valores a leer estarán en otro libro,
no cambian una vez los libros abiertos y se utilizan frecuentemente en el
primer libro. Por eso, trato que los valores se lean una vez y no tener que
volver a leerlos (activando el otro libro y volviendo a activar el libro
original al final) cada vez que los voy a usar.

No se si he esta claro mi problema, pero de no ser asi, os ruego me lo
hagais saber.

Gracias y un saludo
--
Findeo
Juan M
2006-10-19 12:35:54 UTC
Permalink
Hola Findeo
Post by Findeo
Estoy volviendome un poco loco, pues creo que lo he visto en algún sitio,
Si lo has visto en el foro, creo entender que te refieres a esto

http://tinyurl.com/y57d5y

Si no es eso espero que puedas explicarnos otra vez como haces la captura de
datos, ya que los podrias leer una vez y ya esta, luego los almacenas en
diferentes rangos, si las macros, que me imagino que estas empleando se
interrumpen para que el usuario pueda modificar lo que estime oportuno, lo
que podria ocasionar que las variables se borren.
Si las macros corren todas a la vez, podrias intentar declarar las variables
como globales.

No se si esto ha quedado claro pero bueno, si te puedo ayudar en algo,
comentas.

Un saludo
Juan

--- consulta original
Post by Findeo
Buenos días a todos.
Estoy volviendome un poco loco, pues creo que lo he visto en algún sitio,
pero no consigo encontrarlo.
En VBA quisiera poder asignar los valores de las celdas de un rango
(consecutivo) a una matriz, pero sin entrar en un bucle. ¿Es posible hacerlo?
Es decir, por ejemplo, las celdas A1...E1 contienen los valores que quisiera
que se recogieran en una matriz llamada Nivel, de tal modo que
Nivel(1)=A1,
Nivel(2)=B1, ..., Nivel(5)=E1 y que se pudiera hacer la asignación mediante
una instrucción, algo así como Nivel(.¿?.)=Range("A1:E1").Value
Por otro lado, tampoco se si puedo utilizar un Nombre, que se defina en VBA,
que contenga esos mismos valores, y, haciendo algo como lo expuesto
anteriormente, asignar esos valores al nombre (el nombre sería también una
variable matricial, pero disponible en la hoja de calculo)
Todo esto viene a cuento, porque los valores a leer estarán en otro libro,
no cambian una vez los libros abiertos y se utilizan frecuentemente en el
primer libro. Por eso, trato que los valores se lean una vez y no tener que
volver a leerlos (activando el otro libro y volviendo a activar el libro
original al final) cada vez que los voy a usar.
No se si he esta claro mi problema, pero de no ser asi, os ruego me lo
hagais saber.
Gracias y un saludo
--
Findeo
Findeo
2006-10-19 14:00:01 UTC
Permalink
Muchas gracias, Juan M, eso era exactamente lo que buscaba.

A continuación, el problema que me encuentro es que no tengo claro cómo
hacer para que los valores leídos de un rango y asignados a una matriz, sean
"memorizados" al salir de la macro que lo ha ejecutado.
Hombre, siempre los puedo escribir en un rango del libro activo, pero
prefiero hacerlo de otra forma. Por eso, estaba pensando en definir un Nombre
en el libro activo y asignarla los valores previamente leidos, pero tampoco
sé como hacerlo (al tratar de asignar la matriz leída a un nombre definido,
me da error), así que cualquier ayuda sobre esto, será bienvenida.

Un saludo,
--
FindeO
Post by Juan M
Hola Findeo
Post by Findeo
Estoy volviendome un poco loco, pues creo que lo he visto en algún sitio,
Si lo has visto en el foro, creo entender que te refieres a esto
http://tinyurl.com/y57d5y
Si no es eso espero que puedas explicarnos otra vez como haces la captura de
datos, ya que los podrias leer una vez y ya esta, luego los almacenas en
diferentes rangos, si las macros, que me imagino que estas empleando se
interrumpen para que el usuario pueda modificar lo que estime oportuno, lo
que podria ocasionar que las variables se borren.
Si las macros corren todas a la vez, podrias intentar declarar las variables
como globales.
No se si esto ha quedado claro pero bueno, si te puedo ayudar en algo,
comentas.
Un saludo
Juan
--- consulta original
Post by Findeo
Buenos días a todos.
Estoy volviendome un poco loco, pues creo que lo he visto en algún sitio,
pero no consigo encontrarlo.
En VBA quisiera poder asignar los valores de las celdas de un rango
(consecutivo) a una matriz, pero sin entrar en un bucle. ¿Es posible hacerlo?
Es decir, por ejemplo, las celdas A1...E1 contienen los valores que quisiera
que se recogieran en una matriz llamada Nivel, de tal modo que Nivel(1)=A1,
Nivel(2)=B1, ..., Nivel(5)=E1 y que se pudiera hacer la asignación mediante
una instrucción, algo así como Nivel(.¿?.)=Range("A1:E1").Value
Por otro lado, tampoco se si puedo utilizar un Nombre, que se defina en VBA,
que contenga esos mismos valores, y, haciendo algo como lo expuesto
anteriormente, asignar esos valores al nombre (el nombre sería también una
variable matricial, pero disponible en la hoja de calculo)
Todo esto viene a cuento, porque los valores a leer estarán en otro libro,
no cambian una vez los libros abiertos y se utilizan frecuentemente en el
primer libro. Por eso, trato que los valores se lean una vez y no tener que
volver a leerlos (activando el otro libro y volviendo a activar el libro
original al final) cada vez que los voy a usar.
No se si he esta claro mi problema, pero de no ser asi, os ruego me lo
hagais saber.
Gracias y un saludo
--
Findeo
Juan M
2006-10-19 15:44:25 UTC
Permalink
Hola Findeo

El problema que tienes es por la 'vida' de las variables, (puedes leer al
respecto en la ayuda de vba con la exprexion alcance variables).
Creo que si lo que haces es ejecutar dos o mas macros consecutivas la
definicion de tu variable deberia ser global.
Si lo que haces es ejecutar una macro, modificar cosas y luego intentar
recuperar esos valores... me temo que no es posible, todo pasaria por lo que
tu mismo estarias sugiriendo, asignar los valores a un nombre.

Pero lo que has evitado con tu primera pregunta (el bucle) lo necesitas
ahora.

Una forma de dar valores de una matriz a un nombre es asi

ActiveWorkbook.Names.Add Name:="z", RefersToR1C1:="={1,2,3,4}"

Segun esto si creas una cadena de texto donde vayas añadiendo los valores y
cierres al final con llaves

Una cosa asi:

Sub prueba()
Dim i As Integer
Dim cadena As String

For i = 1 To 4
If Len(cadena) > 0 Then
cadena = cadena & "," & i
Else
cadena = i
End If
Next i
cadena = "={" & cadena & "}"
Debug.Print cadena
ActiveWorkbook.Names.Add Name:="zz", RefersTo:=cadena

End Sub

Espero haberte dado alguna pista por donde tirar.

Un saludo
Juan
Post by Findeo
Muchas gracias, Juan M, eso era exactamente lo que buscaba.
A continuación, el problema que me encuentro es que no tengo claro cómo
hacer para que los valores leídos de un rango y asignados a una matriz, sean
"memorizados" al salir de la macro que lo ha ejecutado.
Hombre, siempre los puedo escribir en un rango del libro activo, pero
prefiero hacerlo de otra forma. Por eso, estaba pensando en definir un Nombre
en el libro activo y asignarla los valores previamente leidos, pero tampoco
sé como hacerlo (al tratar de asignar la matriz leída a un nombre definido,
me da error), así que cualquier ayuda sobre esto, será bienvenida.
Un saludo,
--
FindeO
Findeo
2006-10-20 07:56:02 UTC
Permalink
Muchas gracias de nuevo por tu ayuda, Juan.
Sí, mi problema era la "vida" de las variables y por eso creía que
necesitaba asignar los valores a un nombre, pero el problema era que no tenía
claro cómo hacerlo, así que ahora me queda probar con lo que me has
facilitado.

Muchas gracias, de nuevo. Agur.
--
FindeO
Post by Juan M
Hola Findeo
El problema que tienes es por la 'vida' de las variables, (puedes leer al
respecto en la ayuda de vba con la exprexion alcance variables).
Creo que si lo que haces es ejecutar dos o mas macros consecutivas la
definicion de tu variable deberia ser global.
Si lo que haces es ejecutar una macro, modificar cosas y luego intentar
recuperar esos valores... me temo que no es posible, todo pasaria por lo que
tu mismo estarias sugiriendo, asignar los valores a un nombre.
Pero lo que has evitado con tu primera pregunta (el bucle) lo necesitas
ahora.
Una forma de dar valores de una matriz a un nombre es asi
ActiveWorkbook.Names.Add Name:="z", RefersToR1C1:="={1,2,3,4}"
Segun esto si creas una cadena de texto donde vayas añadiendo los valores y
cierres al final con llaves
Sub prueba()
Dim i As Integer
Dim cadena As String
For i = 1 To 4
If Len(cadena) > 0 Then
cadena = cadena & "," & i
Else
cadena = i
End If
Next i
cadena = "={" & cadena & "}"
Debug.Print cadena
ActiveWorkbook.Names.Add Name:="zz", RefersTo:=cadena
End Sub
Espero haberte dado alguna pista por donde tirar.
Un saludo
Juan
Post by Findeo
Muchas gracias, Juan M, eso era exactamente lo que buscaba.
A continuación, el problema que me encuentro es que no tengo claro cómo
hacer para que los valores leídos de un rango y asignados a una matriz, sean
"memorizados" al salir de la macro que lo ha ejecutado.
Hombre, siempre los puedo escribir en un rango del libro activo, pero
prefiero hacerlo de otra forma. Por eso, estaba pensando en definir un Nombre
en el libro activo y asignarla los valores previamente leidos, pero tampoco
sé como hacerlo (al tratar de asignar la matriz leída a un nombre definido,
me da error), así que cualquier ayuda sobre esto, será bienvenida.
Un saludo,
--
FindeO
AnSanVal
2006-10-22 13:44:42 UTC
Permalink
Para que la computadora "recuerde" tus variables necesitas almacenarlas en
algún sitio.
Si no te gusta "alguna zona de la hoja" y dado que sólo se trata de cinco
variables, si estas no van a cambiar, puedes ponerlas en el codigo VBA. Algo
parecido a:
variable = Choose(num, "Var1", "Var2", "Var3", "Var4", "Var5")
Donde: num es el número de índice y Var? son tus variables.

Un saludo desde Tenerife.
**************************************
Post by Findeo
Muchas gracias de nuevo por tu ayuda, Juan.
Sí, mi problema era la "vida" de las variables y por eso creía que
necesitaba asignar los valores a un nombre, pero el problema era que no tenía
claro cómo hacerlo, así que ahora me queda probar con lo que me has
facilitado.
Muchas gracias, de nuevo. Agur.
--
FindeO
Post by Juan M
Hola Findeo
El problema que tienes es por la 'vida' de las variables, (puedes leer al
respecto en la ayuda de vba con la exprexion alcance variables).
Creo que si lo que haces es ejecutar dos o mas macros consecutivas la
definicion de tu variable deberia ser global.
Si lo que haces es ejecutar una macro, modificar cosas y luego intentar
recuperar esos valores... me temo que no es posible, todo pasaria por lo que
tu mismo estarias sugiriendo, asignar los valores a un nombre.
Pero lo que has evitado con tu primera pregunta (el bucle) lo necesitas
ahora.
Una forma de dar valores de una matriz a un nombre es asi
ActiveWorkbook.Names.Add Name:="z", RefersToR1C1:="={1,2,3,4}"
Segun esto si creas una cadena de texto donde vayas añadiendo los valores y
cierres al final con llaves
Sub prueba()
Dim i As Integer
Dim cadena As String
For i = 1 To 4
If Len(cadena) > 0 Then
cadena = cadena & "," & i
Else
cadena = i
End If
Next i
cadena = "={" & cadena & "}"
Debug.Print cadena
ActiveWorkbook.Names.Add Name:="zz", RefersTo:=cadena
End Sub
Espero haberte dado alguna pista por donde tirar.
Un saludo
Juan
Post by Findeo
Muchas gracias, Juan M, eso era exactamente lo que buscaba.
A continuación, el problema que me encuentro es que no tengo claro cómo
hacer para que los valores leídos de un rango y asignados a una matriz, sean
"memorizados" al salir de la macro que lo ha ejecutado.
Hombre, siempre los puedo escribir en un rango del libro activo, pero
prefiero hacerlo de otra forma. Por eso, estaba pensando en definir un Nombre
en el libro activo y asignarla los valores previamente leidos, pero tampoco
sé como hacerlo (al tratar de asignar la matriz leída a un nombre definido,
me da error), así que cualquier ayuda sobre esto, será bienvenida.
Un saludo,
--
FindeO
Loading...