Asignar rangos a matrices

19/10/2006 - 12:21 por Findeo | Informe spam
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)¡,
Nivel(2)±, ..., Nivel(5)á 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

Preguntas similare

Leer las respuestas

#1 Juan M
19/10/2006 - 14:35 | Informe spam
Hola 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
"Findeo" escribió en el mensaje
news:
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)¡,
Nivel(2)±, ..., Nivel(5)á 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
Respuesta Responder a este mensaje
#2 Findeo
19/10/2006 - 16:00 | Informe spam
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


"Juan M" wrote:

Hola 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
"Findeo" escribió en el mensaje
news:
> 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)¡,
> Nivel(2)±, ..., Nivel(5)á 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



Respuesta Responder a este mensaje
#3 Juan M
19/10/2006 - 17:44 | Informe spam
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

"Findeo" escribió en el mensaje
news:
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

Respuesta Responder a este mensaje
#4 Findeo
20/10/2006 - 09:56 | Informe spam
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


"Juan M" wrote:

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

"Findeo" escribió en el mensaje
news:
> 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
>



Respuesta Responder a este mensaje
#5 AnSanVal
22/10/2006 - 15:44 | Informe spam
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.
**************************************
"Findeo" escribió en el mensaje
news:
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


"Juan M" wrote:

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

"Findeo" escribió en el mensaje
news:
> 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
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida