Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 14
Default Arrays and range references in VBA

I want to do something similar to this. Can it be done?
Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN
z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


Thanks
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 783
Default Arrays and range references in VBA

Stewart wrote:
I want to do something similar to this. Can it be done?
Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN
z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


Thanks


Try it with Range("A1:A" & x).Interior.ColorIndex = 39 (untested)

Alan Beban
  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 783
Default Arrays and range references in VBA

Alan Beban wrote:
Stewart wrote:

I want to do something similar to this. Can it be done?
Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


Thanks



Try it with Range("A1:A" & x).Interior.ColorIndex = 39 (untested)

Alan Beban


Should be Range("A1:A" & x - 1).Interior.ColorIndex = 39

Alan Beban
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 17
Default Arrays and range references in VBA

why not put the .Interior.ColorIndex line within the If statement?
Sub gg()
Dim t(40000) As Range, z As Long
For x = 1 To 40000
If Condition Then
z = z + 1
Set t(z) = Range("A1")(x)
t(z).Interior.ColorIndex = 39 '<--- like this
End If
Next

End Sub

or you would have to create another For statement...

Sub gg()
Dim t(40000) As Range, z As Long
For x = 1 To 40000
If Condition Then
z = z + 1
Set t(z) = Range("A1")(x)
End If
Next
'Below line creates another For Statement
For z = 0 To UBound(t, 1)
t(z).Interior.ColorIndex = 39
Next

End Sub


Ronin
"Stewart" wrote:

I want to do something similar to this. Can it be done?
Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN
z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


Thanks

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 14
Default Arrays and range references in VBA

Yes, that is correct, but it takes too long (<--relative) to format all of
those individually even with screenupdating turned off.
thanks

"Ronin" wrote:

why not put the .Interior.ColorIndex line within the If statement?
Sub gg()
Dim t(40000) As Range, z As Long
For x = 1 To 40000
If Condition Then
z = z + 1
Set t(z) = Range("A1")(x)
t(z).Interior.ColorIndex = 39 '<--- like this
End If
Next

End Sub

or you would have to create another For statement...

Sub gg()
Dim t(40000) As Range, z As Long
For x = 1 To 40000
If Condition Then
z = z + 1
Set t(z) = Range("A1")(x)
End If
Next
'Below line creates another For Statement
For z = 0 To UBound(t, 1)
t(z).Interior.ColorIndex = 39
Next

End Sub


Ronin
"Stewart" wrote:

I want to do something similar to this. Can it be done?
Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN
z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


Thanks



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default Arrays and range references in VBA

Hi Stuart,

The basic answer is you can't format a range array in one go. Some
alternatives:

1. Format the current true range in the loop, as suggested by Alan and Ronin

2. Union True ranges and format the "big" range.

Problem with union is if the resulting big range results in a large number
of discontiguous areas (say a few hundred) it will be slow. Ie, loop & union
1000 adjacent cells is fast, but 500 alternate cells slow, and exponentially
slower with more. So combine 1 & 2. Continue union'ing adjacent true
ranges. When you get to a false range, format the previous big union range.
Set the big range to nothing and start again.

With 1 & 2, it might be worth first building a Boolean array. Format the
entire range with whatever is the larger qty of true's/false's, then go back
and format the smaller number individually.

3. Conditional formatting, if viable.

4 Autofilter. Insert a new row at the top for header (s). If your True
condition is a common value simply filter on that value, format, and remove
the filter. If not a simple value, devise a formula to put in an adjacent
column to evaluate to true/false. Use Autofill if appropriate to maintain
relative addressing, Filter the formula column and format required adjacent
columns.

With your 40k cell loop & formats I suspect the Filter method would be by
far the fastest (other than CF).

Regards,
Peter T

"Stewart" wrote in message
...
I want to do something similar to this. Can it be done?
Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN
z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


Thanks



  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 783
Default Arrays and range references in VBA

Peter T wrote:
Hi Stuart,

The basic answer is you can't format a range array in one go. Some
alternatives:

1. Format the current true range in the loop, as suggested by Alan and Ronin
. . . .


I wasn't suggesting that the color formatting be done "in the loop";
simply that t().Interior.Color.Index = 39 in the pseudocode below, which
occurs after the loop has been completed, be replaced by
Range("A1:A" & x-1).Interior.Color.Index = 39

Alan Beban

Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN
z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


Thanks




  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 14
Default Arrays and range references in VBA

Thanks you all for the replies. As always, this is a helpful group.

"Stewart" wrote:

I want to do something similar to this. Can it be done?
Sub gg()
Dim t(40000) As Range, z as long
z=0
For x = 1 To 40000
If CONDITION THEN
z=z+1
Set t(z) = Range("A1")(x)
end if
Next
t().Interior.ColorIndex = 39
End Sub


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
Relative references in arrays hmm Excel Discussion (Misc queries) 1 January 11th 07 02:36 PM
How to rename references from range names to cell references Abbas Excel Discussion (Misc queries) 1 May 24th 06 06:18 PM
Using arrays or range in IF function - HELP PLS MickJJ Excel Worksheet Functions 1 February 10th 06 05:43 PM
Dynamic Range and arrays PR Excel Discussion (Misc queries) 2 November 14th 05 03:51 AM
Arrays: Subscript out of range nortor Excel Programming 4 February 17th 05 09:13 AM


All times are GMT +1. The time now is 12:06 AM.

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"