Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 236
Default More on N-by-M assignment into a Worksheet

I'd like to get this code to enter "2,4,7" in A1:C10.

A requirement is that their be only a single assignment into the
worksheet.

DON{T POST A SOLUTION WHERE "2,4,7" IS ENTERED INTO THE WORKSHEET ON
EACH ITERATION.


If this example can be made to work the next step would be to time and
compare against similar code that assigns a row at a time and then a
cell at a time.

Thanks.

Sub N_By_M()
Dim x() As Variant, i As Long, startTime As Single, endTime As
Single
Dim b As Workbook
Dim s As Worksheet
Dim r As Range

ReDim x(10)
Const maxLoop As Long = 10

startTime = Timer

For i = 1 To maxLoop
ReDim Preserve x(1 To i)
x(i) = Array(2, 4, 7)
Next i

Set b = ActiveWorkbook
Set s = b.Sheets("Sheet1")
Set r = s.Range("A1:C10")
r.Value = Application.Transpose(x)

endTime = Timer
MsgBox endTime - startTime
End Sub

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default More on N-by-M assignment into a Worksheet

You need to either assign the LBound and UBound of you arrays or be more
consistent in your apparoach. Maybe you have Option Base 1 set, but I do
not, hence:
ReDim x(10) '0 To 9

so you cannot then change to
ReDim Preserve x(1 To i)


Also, you have already dimmed x, so there is no reason to redim the loop.

So x is an array of variants, each element containing a Variant array.
Note an "array of variants" is not the same thing as "a Variant array". You
do not have a 2-D array. Try the line of code below:
?ubound(x,2)

However, can you not achieve the same with one line ?
Range("A1:C10").Value = Array(2, 4, 7)

NickHK

wrote in message
oups.com...
I'd like to get this code to enter "2,4,7" in A1:C10.

A requirement is that their be only a single assignment into the
worksheet.

DON{T POST A SOLUTION WHERE "2,4,7" IS ENTERED INTO THE WORKSHEET ON
EACH ITERATION.


If this example can be made to work the next step would be to time and
compare against similar code that assigns a row at a time and then a
cell at a time.

Thanks.

Sub N_By_M()
Dim x() As Variant, i As Long, startTime As Single, endTime As
Single
Dim b As Workbook
Dim s As Worksheet
Dim r As Range

ReDim x(10)
Const maxLoop As Long = 10

startTime = Timer

For i = 1 To maxLoop
ReDim Preserve x(1 To i)
x(i) = Array(2, 4, 7)
Next i

Set b = ActiveWorkbook
Set s = b.Sheets("Sheet1")
Set r = s.Range("A1:C10")
r.Value = Application.Transpose(x)

endTime = Timer
MsgBox endTime - startTime
End Sub



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 236
Default More on N-by-M assignment into a Worksheet

NickHK writes:

Also, you have already dimmed x, so there is no reason to redim the loop.


I'm rediming because I want to modify the example to dynamically build
the array and x will not be dimmed. So I'll take out the dim.

So x is an array of variants, each element containing a Variant array.
Note an "array of variants" is not the same thing as "a Variant array". You
do not have a 2-D array. Try the line of code below:
?ubound(x,2)


However, can you not achieve the same with one line ?
Range("A1:C10").Value = Array(2, 4, 7)


Well you could but then you'd destroy the significance of the example.
The point is to get N by M assignment into a worksheet going. The next
step after getting the syntax correct is to swap out the hardcoded
values of 2,4,7 with values read from a file or fetched from a SQL
resultset.

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default More on N-by-M assignment into a Worksheet

You mean like this:

Dim arr() As Variant
Dim i As Long

For i = 1 To 5
ReDim Preserve arr(1 To i)
arr(i) = Array(1, 2, 3)
Next

Range("A1:C5").Value = Application.Transpose(Application.Transpose(arr))

End Sub

NickHK

wrote in message
oups.com...
NickHK writes:

Also, you have already dimmed x, so there is no reason to redim the

loop.

I'm rediming because I want to modify the example to dynamically build
the array and x will not be dimmed. So I'll take out the dim.

So x is an array of variants, each element containing a Variant array.
Note an "array of variants" is not the same thing as "a Variant array".

You
do not have a 2-D array. Try the line of code below:
?ubound(x,2)


However, can you not achieve the same with one line ?
Range("A1:C10").Value = Array(2, 4, 7)


Well you could but then you'd destroy the significance of the example.
The point is to get N by M assignment into a worksheet going. The next
step after getting the syntax correct is to swap out the hardcoded
values of 2,4,7 with values read from a file or fetched from a SQL
resultset.



  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 236
Default More on N-by-M assignment into a Worksheet

Absolutely perfect NickHK!

Thanks!



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default More on N-by-M assignment into a Worksheet

It was Tom who pointed out that Transpose flattens an array, so it was just
applying that really.

NickHK

wrote in message
ups.com...
Absolutely perfect NickHK!

Thanks!



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Number Assignment GRK Excel Worksheet Functions 3 April 26th 08 12:31 AM
point assignment Blah Excel Discussion (Misc queries) 4 July 21st 06 12:29 AM
Key Assignment Log Norma Excel Discussion (Misc queries) 0 May 12th 05 04:10 PM
Assignment problem [email protected] Excel Programming 4 October 10th 04 07:17 PM
Worksheet object assignment Heapy Excel Programming 0 September 18th 03 08:37 PM


All times are GMT +1. The time now is 10:32 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"