ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Fast export large 2-dim array to worksheet (https://www.excelbanter.com/excel-programming/352748-fast-export-large-2-dim-array-worksheet.html)

aafraga

Fast export large 2-dim array to worksheet
 

Hello Excel Community,

For many years, I have been programming in EXCEL VBA and often use 2
dimensional arrays, usually of type Double of Variant. Normally, I
would declare the array such as :
Dim aMatrix(10000,50) as Double

Some math code would populate all the cells and I would then print the
aMatrix to a worksheet by nesting in a double loop:
for i...
for j...
Sheet1.Cells(i,j).Value = aMatrix(i,j)

The problem here is that Excel really slows down after a couple of
thousand.
Is there a fast way to bulk copy an array to a worksheet ?

I am looking for a function along the lines of
FastCopytoWorkSheet (aMatrix() as double, aRange as Range)
....

Is it best to just turn off screen updating or is there a more elegant
way ?
Many thanks and best regards,
Alberto


--
aafraga
------------------------------------------------------------------------
aafraga's Profile: http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=510013


Tom Ogilvy

Fast export large 2-dim array to worksheet
 
Dim aMatrix(10000,50) as Double

' code the populates the aMatrix

lb1 = lbound(aMatrix,1)
lb2 = lbound(aMatrix,2)
ub1 = ubound(aMatrix,1)
ub2 = ubound(aMatrix,2)
rws = ub1 - lb1 + 1
cols = ub2- lb2 + 1
Sheet1.Cells(1,1).Resize(rws,cols).Value = aMatrix

Obviously, if you know the number of rows and columns, you don't need to
calculate them as I have. However, without knowing option base, and you
didn't specify the lower bound, I provided a generalized approach. The key
bit is you can put it all down in one step.

--
Regards,
Tom Ogilvy



"aafraga" wrote in
message ...

Hello Excel Community,

For many years, I have been programming in EXCEL VBA and often use 2
dimensional arrays, usually of type Double of Variant. Normally, I
would declare the array such as :
Dim aMatrix(10000,50) as Double

Some math code would populate all the cells and I would then print the
aMatrix to a worksheet by nesting in a double loop:
for i...
for j...
Sheet1.Cells(i,j).Value = aMatrix(i,j)

The problem here is that Excel really slows down after a couple of
thousand.
Is there a fast way to bulk copy an array to a worksheet ?

I am looking for a function along the lines of
FastCopytoWorkSheet (aMatrix() as double, aRange as Range)
...

Is it best to just turn off screen updating or is there a more elegant
way ?
Many thanks and best regards,
Alberto


--
aafraga
------------------------------------------------------------------------
aafraga's Profile:

http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=510013




Peter T

Fast export large 2-dim array to worksheet
 
Sub test()
Dim are(1 To 10000, 1 To 50) As Double
Dim r As Long, c As Long

For c = 1 To 50
For r = 1 To 10000
ar(r, c) = r + (c / 100)
Next
Next
Range(Cells(1, 1), Cells(10000, 50)).Value = ar

End Sub


Around this size it might be faster to start breaking down into smaller
arrays before dumping.

Regards,
Peter T

"aafraga" wrote in
message ...

Hello Excel Community,

For many years, I have been programming in EXCEL VBA and often use 2
dimensional arrays, usually of type Double of Variant. Normally, I
would declare the array such as :
Dim aMatrix(10000,50) as Double

Some math code would populate all the cells and I would then print the
aMatrix to a worksheet by nesting in a double loop:
for i...
for j...
Sheet1.Cells(i,j).Value = aMatrix(i,j)

The problem here is that Excel really slows down after a couple of
thousand.
Is there a fast way to bulk copy an array to a worksheet ?

I am looking for a function along the lines of
FastCopytoWorkSheet (aMatrix() as double, aRange as Range)
...

Is it best to just turn off screen updating or is there a more elegant
way ?
Many thanks and best regards,
Alberto


--
aafraga
------------------------------------------------------------------------
aafraga's Profile:

http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=510013




Peter T

Fast export large 2-dim array to worksheet
 
Typo

Dim are(1 To 10000, 1 To 50) As Double


Dim ar(1 To 10000, 1 To 50) As Double


Spell checker must have changed "ar" to "are" without me noticing and
pressing wrong button.

Tom - I didn't see yours, didn't mean to duplicate.

Regards,
Peter T

"Peter T" <peter_t@discussions wrote in message
...
Sub test()
Dim are(1 To 10000, 1 To 50) As Double
Dim r As Long, c As Long

For c = 1 To 50
For r = 1 To 10000
ar(r, c) = r + (c / 100)
Next
Next
Range(Cells(1, 1), Cells(10000, 50)).Value = ar

End Sub


Around this size it might be faster to start breaking down into smaller
arrays before dumping.

Regards,
Peter T

"aafraga" wrote in
message ...

Hello Excel Community,

For many years, I have been programming in EXCEL VBA and often use 2
dimensional arrays, usually of type Double of Variant. Normally, I
would declare the array such as :
Dim aMatrix(10000,50) as Double

Some math code would populate all the cells and I would then print the
aMatrix to a worksheet by nesting in a double loop:
for i...
for j...
Sheet1.Cells(i,j).Value = aMatrix(i,j)

The problem here is that Excel really slows down after a couple of
thousand.
Is there a fast way to bulk copy an array to a worksheet ?

I am looking for a function along the lines of
FastCopytoWorkSheet (aMatrix() as double, aRange as Range)
...

Is it best to just turn off screen updating or is there a more elegant
way ?
Many thanks and best regards,
Alberto


--
aafraga
------------------------------------------------------------------------
aafraga's Profile:

http://www.excelforum.com/member.php...o&userid=31314
View this thread:

http://www.excelforum.com/showthread...hreadid=510013







All times are GMT +1. The time now is 09:40 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com