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 / New Users / November 2006

Tip: Looking for answers? Try searching our database.

A more elegant solution to grab a range?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Charles - 11 Nov 2006 15:12 GMT
Hello

I am looking for a more elegant (and shorter) solution to grab the
content of an excel range into an array:

Dim grab
Dim value()
grab = Range("A1:A100").Value2
ReDim value(1 To UBound(grab))
For i = 1 To UBound(grab)
   value(i) = grab(i, 1)
Next i

I could just use the array grab but then I have to carry a two
dimensional syntax all the way, although I know that grab only contains
one column. Or is there a simple instruction to "destroy " one of the
dimensions of an array?

Thanks ina advance
Charles
Dave Peterson - 11 Nov 2006 15:20 GMT
Dim myArr As Variant
myArr = Application.Transpose(Range("a1:a100").Value2)

IIRC, this will break in some versions of excel if you have more than 5461
elements.

> Hello
>
[quoted text clipped - 16 lines]
> Thanks ina advance
> Charles

Signature

Dave Peterson

Charles - 11 Nov 2006 15:29 GMT
I am impressed. Very efficient!

thanks
Charles

> Dim myArr As Variant
> myArr = Application.Transpose(Range("a1:a100").Value2)
[quoted text clipped - 22 lines]
> > Thanks ina advance
> > Charles
Alan Beban - 12 Nov 2006 01:11 GMT
You can also readily "destroy" the second dimension of a 2-D
*horizontal* array. The most commonly referred to way is

myArr = Application.Transpose(Application.Transpose(Range("a1:z1").Value2))

Another is

myArr = Application.Index(Range("a1:z1").Value2, 1, 0)

Alan Beban

> I am impressed. Very efficient!
>
[quoted text clipped - 27 lines]
>>> Thanks ina advance
>>> Charles
Arvi Laanemets - 11 Nov 2006 19:25 GMT
Hi

Public Sub Test()
Dim MyArray() As Variant
Dim rngTest As Range
Dim RowNum As Integer
Dim ColNum As Integer

Set rngTest = [TestRange]
RowNum = rngTest.Rows.Count
ColNum = rngTest.Columns.Count
ReDim MyArray(RowNum, ColNum)
MyArray = rngTest

End Sub

TestRange is a dynamic named range, defined in workbook, something like
=OFFSET(Sheet1!$A$1,1,,COUNTA(Sheet1!$A:$A)-1,COUNTA(Sheet1!$1;$1))

Arvi Laanemets

> Hello
>
[quoted text clipped - 16 lines]
> Thanks ina advance
> Charles
 
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.