Matrices, F. Array() y rangos

14/06/2006 - 19:46 por klomkbock | Informe spam
Hola a todos de nuevo

Hace no mucho estuve leyendo, no se si directamente en este foro(tu
tiempo) o directamente en los de google, una consulta sobre matrices y
rangos creo que contestada por KL y ahora no consigo encontrarla y me
suena que era mas o menos lo que ando buscando. De todas formas suelto mi
duda por si podeis echarme un cable:

Hasta ahora solo he usado la funcion array para crear matrices, y,
cuando se trata de rangos (en general los campos de un unico registro para
rellenar con algun bucle for o algo similar), no se hacerlo si no es
introduciendo los campos uno a uno (pej: with celda: miarray=Array(.value,
.Offset(0,1).value, ). ¿Se puden introducir con la f. array todo el
rango junto (pej: miarray=Array("a1:k1") o miarray=Array("a" & i &":k" 6
i))?. Con matrices creo recordar que si por aquella y otras consultas que
he leido, pero no se muy bien como, y creo que en la ayuda no lo indica
(al menos para la f. array) de una manera clara.

Por otro lado, para rellenar otro rango, o, pej. un textbox, cuando se
trata de buscar entre varios miles de registros(no mas de diezmil) y para
alrededor de 15 campos,¿que seria mas rapido (o como puedo comprobarlo)de
estas opciones?:

(with celda): (miarray)
TextBox1 = .Offset(0,1).value o TextBox1 = miarray(j)

En cualquier caso si me podeis facilitar la direccion de dicha consulta o
de cualquier otra mas o menos especifica sobre el tema (me he dado unas
cuantas vueltas por los foros pero no he encontrado nada claro; lo de una
aguja en ...) os lo agradezco.

Un saludo y hasta pronto
Ivan
 

Leer las respuestas

#1 KL
14/06/2006 - 20:09 | Informe spam
Hola Ivan,

Si te he entendido bien, entonces la cosa es mas simple:

1) para asignar los valores de un rango a una variable en formato matriz basta la siguiente expresion:

Dim MiMatriz As Variable
MiMatriz=Range("A1:K1").Value

Esta expresion vale tanto para rangos unidimensionales como los bidimensionales. Ojo - al asignar la matriz de esta manera Excel automaticamente crea una matriz bidimensional tanto para ambos tipos de matrices con la base 1, p.ej. la instruccion

Dim MiMatriz As Variable
MiMatriz=Range("A1:K1").Value

generaria una matriz con los siguientes elementos:

MiMatriz(1,1)
MiMatriz(1,2)
MiMatriz(1,3)
MiMatriz(1,4)
MiMatriz(1,5)
MiMatriz(1,6)
MiMatriz(...)
MiMatriz(1,11)

2) en base a lo anterior y suponiendo que estamos hablando de los controles TextBox en un UserForm, asignarias los valores a los textboxes de la siguiente manera:

For i=1 to UBound(MiMatriz)
Controls("TextBox" & i)=MiMatriz(1,i)
Next i

En todo caso, para esta situacion seria mas eficiente evitar la creacion de la matriz hacer algo asi:

For i=1 to Range("A1:K1").Count
Controls("TextBox" & i)=Range("A1:K1")(i).Value
Next i

Saludos,
KL


"Ivan" wrote in message news:
Hola a todos de nuevo

Hace no mucho estuve leyendo, no se si directamente en este foro(tu
tiempo) o directamente en los de google, una consulta sobre matrices y
rangos creo que contestada por KL y ahora no consigo encontrarla y me
suena que era mas o menos lo que ando buscando. De todas formas suelto mi
duda por si podeis echarme un cable:

Hasta ahora solo he usado la funcion array para crear matrices, y,
cuando se trata de rangos (en general los campos de un unico registro para
rellenar con algun bucle for o algo similar), no se hacerlo si no es
introduciendo los campos uno a uno (pej: with celda: miarray=Array(.value,
Offset(0,1).value, ). ¿Se puden introducir con la f. array todo el
rango junto (pej: miarray=Array("a1:k1") o miarray=Array("a" & i &":k" 6
i))?. Con matrices creo recordar que si por aquella y otras consultas que
he leido, pero no se muy bien como, y creo que en la ayuda no lo indica
(al menos para la f. array) de una manera clara.

Por otro lado, para rellenar otro rango, o, pej. un textbox, cuando se
trata de buscar entre varios miles de registros(no mas de diezmil) y para
alrededor de 15 campos,¿que seria mas rapido (o como puedo comprobarlo)de
estas opciones?:

(with celda): (miarray)
TextBox1 = .Offset(0,1).value o TextBox1 = miarray(j)

En cualquier caso si me podeis facilitar la direccion de dicha consulta o
de cualquier otra mas o menos especifica sobre el tema (me he dado unas
cuantas vueltas por los foros pero no he encontrado nada claro; lo de una
aguja en ...) os lo agradezco.

Un saludo y hasta pronto
Ivan


Preguntas similares