Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Excel / Programming / December 2006

Tip: Looking for answers? Try searching our database.

How to select a single "column" of a VBA array?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
pinkfloydfan - 15 Dec 2006 21:48 GMT
Hi all

I have a function that creates a 2-D array within VBA and stores this
as part of an object's data.

With another function I would like to access just a specific "column"
of that array.  if the array was stored in an excel sheet then I could
use worksheetfunction.index but this does not seem to work on a vba
array (and the array is way too big to put into a spreadsheet plus that
would be a ridiculously slow method).

So, before I write another function to pull out the "column" I want
into another array is there something already within VBA I can use?

I am using Excel 2003.

Thanks a lot
Lloyd
Jim Cone - 16 Dec 2006 00:13 GMT
Actually you can use Index to return a specific column of an array...

Sub CreateSuperSizeMeArray()
    Dim arr(1 To 50000, 1 To 5)
    Dim varCol As Variant
    Dim j As Long
    Dim i As Long

    For i = 1 To 50000
        For j = 1 To 5
            arr(i, j) = i + j * 100
        Next j
    Next i
    varCol = Application.Index(arr, 0, 3)
    MsgBox varCol(1, 1) & vbCr & _
           Application.Index(Application.Index(arr, 0, 3), 25000, 1) & _
           vbCr & varCol(50000, 1)
End Sub
------------
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware

"pinkfloydfan"
<lloyd.greensite@googlemail.com>
wrote in message
Hi all
I have a function that creates a 2-D array within VBA and stores this
as part of an object's data.
With another function I would like to access just a specific "column"
of that array.  if the array was stored in an excel sheet then I could
use worksheetfunction.index but this does not seem to work on a vba
array (and the array is way too big to put into a spreadsheet plus that
would be a ridiculously slow method).
So, before I write another function to pull out the "column" I want
into another array is there something already within VBA I can use?
I am using Excel 2003.
Thanks a lot
Lloyd
Tom Ogilvy - 16 Dec 2006 00:51 GMT
Just to add that this fails for an array > 65536 rows.

Since the OP said it was too large to put on a worksheet. (which could mean
it is larger than the limit)

Signature

regards,
Tom Ogilvy

> Actually you can use Index to return a specific column of an array...
>
[quoted text clipped - 35 lines]
> Thanks a lot
> Lloyd
jchen - 16 Dec 2006 01:48 GMT
Basically the index is maxed at Long number limit. I don't think any array
can that more than that.

I guess you can create your own 2D Matrix using double as index and go
beyound the limit. And use Array of Arrays to store more data.

Like have a MyArray(65536 , 65536)
And put a lot of them in A collection(MyArray)
And calculate the double index to map your matrix

This is a bad example because array like that waste a lot of memory. Anyway,
you get the idea.

> Just to add that this fails for an array > 65536 rows.
>
[quoted text clipped - 40 lines]
> > Thanks a lot
> > Lloyd
Jim Cone - 16 Dec 2006 01:48 GMT
Tom,
Thanks for that; I have added a comment to my notes on indexing Arrays.
The following is all I could come up with to "pull out" a
column from a larger array.  It does work almost instantly...
Regards,
Jim Cone
San Francisco, USA

--------------------------
Sub CreateSuperSizeMeArray_R1()
    Dim arr(1 To 66000, 1 To 5) As Long
    Dim arrCol() As Long
    Dim j As Long
    Dim i As Long

    For i = 1 To 66000
        For j = 1 To 5
            arr(i, j) = i + j * 100
        Next j
    Next i
   
   'Create single column array containing the 3rd column of arr.
    ReDim arrCol(LBound(arr, 1) To UBound(arr, 1), 1 To 1)
    For i = LBound(arr, 1) To UBound(arr, 1)
        arrCol(i, 1) = arr(i, 3)
    Next 'i
   
    MsgBox arrCol(1, 1) & vbCr & _
           arrCol(33000, 1) & vbCr & _
           arrCol(66000, 1)
End Sub
'------------

"Tom Ogilvy" <twogilvy@msn.com>
wrote in message
Just to add that this fails for an array > 65536 rows.
Since the OP said it was too large to put on a worksheet. (which could mean
it is larger than the limit)
Signature

regards,
Tom Ogilvy

"Jim Cone" <jim.coneXXX@rcn.comXXX>
wrote in message
Actually you can use Index to return a specific column of an array...

>
> Sub CreateSuperSizeMeArray()
[quoted text clipped - 34 lines]
> Thanks a lot
> Lloyd
Alan Beban - 17 Dec 2006 03:37 GMT
If the functions in the freely downloadable file at
http://home.pacbell.net/beban are available to your workbook, another way is

>  Sub CreateSuperSizeMeArray_R1()
>      Dim arr(1 To 66000, 1 To 5) As Long
[quoted text clipped - 9 lines]
>
>     'Create single column array containing the 3rd column of arr.
      newArray = SubArray(arr, 3, 3, 1, 66000)
End Sub

>Jim Cone wrote:
> Tom,
[quoted text clipped - 35 lines]
> Since the OP said it was too large to put on a worksheet. (which could mean
> it is larger than the limit)
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.