Thread: ReDim Array
View Single Post
  #1   Report Post  
Posted to microsoft.public.excel.programming
Brandt Brandt is offline
external usenet poster
 
Posts: 33
Default ReDim Array

Thank You Tom and Charles

I think Tom's Code is Exactly what I need

Brandt

"Tom Ogilvy" wrote:

You can only redim the last dimension of a dynamic array. To accomplish what
you want, you would need to transpose, redim and transpose back

Sub Tester1()
Dim Array_Temp()
Const Selections As Long = 50

ReDim Array_Temp(1 To Selections, 1 To 5)

' code to fill up the array
For i = 1 To Int(Rnd() * 50 + 1)
For j = 1 To 5
Array_Temp(i, j) = Int(Rnd() * 100 + 1)
Next
Next

maxUsed = 0
For i = 1 To Selections
If Not IsEmpty(Array_Temp(i, 1)) Then
maxUsed = i
End If
Next
Debug.Print "Befo ", maxUsed, UBound(Array_Temp, 1)
Array_Temp = Application.Transpose(Array_Temp)
ReDim Preserve Array_Temp(1 To 5, 1 To maxUsed)
Array_Temp = Application.Transpose(Array_Temp)
Debug.Print "After: ", maxUsed, UBound(Array_Temp, 1)
End Sub


this produced:

Befo 36 50
After: 36 36

as an example.

--
Regards,
Tom Ogilvy


"Brandt" wrote:

I have some VBA code that looks at a data table on a worksheet. The code
decides whether or not a given line meets certain criteria or not and if it
does it records the row into the next open row of an array. I do not know
how many rows of good data will be found so I have set a constant Selections
= 50 and then dimensioned the array to: Dim Array_Temp(1 to Selections, 1 to
5). There will however probably only be 10 to 20 used entries. Once the
array has been successfully filled I would like to re-dimension it (or
something) to remove the rows that were not needed so that I can send it to a
sorting function and not have the rows of non used entries.

Thanks for any help

Brandt