View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.programming
Charles Williams Charles Williams is offline
external usenet poster
 
Posts: 968
Default Redimming (preserve) a 3D array

Copying arrays element by element is pretty fast (Redim Preserve also uses
array copying under the covers, but possible more efficiently).
Depending on exactly what you want to do two alternative approaches might be
to

- change the sequence of the dimensions to (1 to 3, 1 to 10, 1 to 100) so
that the one you want to Redim Preserve is last
- use jagged arrays of variants
Jagged array method works something like this:

OPtion Base 1

Dim Var1 as variant
dim Var2 as variant
dim Var3 as variant

dim varJagged(3) as variant

Var1 = Range("A1:A10").Value
Var2 = Range("D10:D100").Value
Var3 = Range("F5:F250").Value

varJagged(1)=Var1
varJagged(2)=Var2
varJagged(3)=Var3

msgbox varJagged(2) (54,1)
Charles___________________________________________ _______The Excel
Calculation Sitehttp://www.decisionmodels.com"ker_01"
wrote in message
...
This is a repost of an earlier question that didn't recieve responses (my
question may have been too obscure).

I have a 3D array which I'll call myarray(1 to 10, 1 to 100, 1 to 3)

I would like to reduce the number of parameters to turn it into a 2D array
which I'll call mynewarray(1 to 10, 1 to100) while keeping the data that
is already in the array.

Redim/preserve only allows you to mess with the last dimension (1 to 3),
which is fine- but from help:
"Similarly, when you use Preserve, you can change the size of the array
only by changing the upper bound; changing the lower bound causes an
error"

The data I'd like to preserve is in the middle, e.g. mynewarray(x, y) =
myarray(x,y,2)

Is there a better method, or will I be forced to loop through and build
mynewarray one value at a time? The real problem is that in my larger loop
of code, myarray is dynamic and is updated frequently, and I'll have to
pull current copies of mynewarray fairly often, and that seems like a lot
of processing overhead. If there is a way to redim the array directly,
that would save me all kinds of time.

Thanks!

Keith