ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Using a function to return a populated array (https://www.excelbanter.com/excel-programming/443765-using-function-return-populated-array.html)

CompleteNewb[_2_]

Using a function to return a populated array
 
I have this part of a procedure that gives me all the certain values I'm
looking for, and I use it to determine column headings in some sheets, row
headings in others, and various counts and checks, etc. I have to run it in
every Sub for which I use this array. I experimented with CPearson's page
on using functions to return arrays, but I think I'm at too low a level to
grasp it. Is there a relatively easy way to set up the following so I can
just use the completed MyArray in other subs without having to run this
every time? Like in the sub I'd be able to set a range.value to
FunctionName(MyArray)?

With MySheet.Columns("C")
Set foundit = .Find("MyString", LookIn:=xlValues, LookAt:=xlPart)
If Not foundit Is Nothing Then
FirstAddress = foundit.Address
Do
Startrange =
MySheet.Range(foundit.Address).Offset(3, -2).Address
EndRange = MySheet.Range(Startrange).End(xlDown).Address
For Each cell In MySheet.Range(Startrange,
EndRange)
ReDim Preserve MyArray(0 To i)
MyArray(i) = cell.Value
i = i + 1
Next cell
Set foundit = .FindNext(foundit)
Loop While Not foundit Is Nothing And foundit.Address <
FirstAddress
i = 0
End If
End With

Thanks for any thoughts and help


Dave Peterson[_2_]

Using a function to return a populated array
 
I don't quite understand how you're going to use this, but could you declare the
myArray as a public/global variable -- outside any procedure and then populate
it once and use it where ever you want.

On 10/15/2010 01:33, CompleteNewb wrote:
I have this part of a procedure that gives me all the certain values I'm looking
for, and I use it to determine column headings in some sheets, row headings in
others, and various counts and checks, etc. I have to run it in every Sub for
which I use this array. I experimented with CPearson's page on using functions
to return arrays, but I think I'm at too low a level to grasp it. Is there a
relatively easy way to set up the following so I can just use the completed
MyArray in other subs without having to run this every time? Like in the sub I'd
be able to set a range.value to FunctionName(MyArray)?

With MySheet.Columns("C")
Set foundit = .Find("MyString", LookIn:=xlValues, LookAt:=xlPart)
If Not foundit Is Nothing Then
FirstAddress = foundit.Address
Do
Startrange = MySheet.Range(foundit.Address).Offset(3, -2).Address
EndRange = MySheet.Range(Startrange).End(xlDown).Address
For Each cell In MySheet.Range(Startrange, EndRange)
ReDim Preserve MyArray(0 To i)
MyArray(i) = cell.Value
i = i + 1
Next cell
Set foundit = .FindNext(foundit)
Loop While Not foundit Is Nothing And foundit.Address < FirstAddress
i = 0
End If
End With

Thanks for any thoughts and help


--
Dave Peterson

minimaster

Using a function to return a populated array
 
I agree with Dave, that should be the way to go.
Here a simple example how to return an array via a function while
using a global variable to hold the array.

'define a global variant for the array
Dim mnth As Variant

Sub MainRoutine()
mnth=MonthlyDateArray(2011)
' now mnth contains an array of 12 date values
End Sub

Function MonthlyDateArray(TheYear As Integer, Optional MonthDay As
Integer) As Variant
' returns variant array with 12 dates, one for each month
Dim i As Integer
Dim m As Variant
m = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",
"12")
If MonthDay < 1 Or MonthDay 31 Then MonthDay = 1
For i = 1 To 12
m(i) = m(i) & "/" & MonthDay & "/" & TheYear
Next i
MonthlyDateArray = m
End Function

CompleteNewb[_2_]

Using a function to return a populated array
 
That IS the best way to do it, and thanks. I should have thought of it
before posting, I was just in "must use a function" mode.

Thanks, Dave


"Dave Peterson" wrote in message
...
I don't quite understand how you're going to use this, but could you
declare the myArray as a public/global variable -- outside any procedure
and then populate it once and use it where ever you want.

On 10/15/2010 01:33, CompleteNewb wrote:
I have this part of a procedure that gives me all the certain values I'm
looking
for, and I use it to determine column headings in some sheets, row
headings in
others, and various counts and checks, etc. I have to run it in every Sub
for
which I use this array. I experimented with CPearson's page on using
functions
to return arrays, but I think I'm at too low a level to grasp it. Is
there a
relatively easy way to set up the following so I can just use the
completed
MyArray in other subs without having to run this every time? Like in the
sub I'd
be able to set a range.value to FunctionName(MyArray)?

With MySheet.Columns("C")
Set foundit = .Find("MyString", LookIn:=xlValues, LookAt:=xlPart)
If Not foundit Is Nothing Then
FirstAddress = foundit.Address
Do
Startrange = MySheet.Range(foundit.Address).Offset(3, -2).Address
EndRange = MySheet.Range(Startrange).End(xlDown).Address
For Each cell In MySheet.Range(Startrange, EndRange)
ReDim Preserve MyArray(0 To i)
MyArray(i) = cell.Value
i = i + 1
Next cell
Set foundit = .FindNext(foundit)
Loop While Not foundit Is Nothing And foundit.Address < FirstAddress
i = 0
End If
End With

Thanks for any thoughts and help


--
Dave Peterson




All times are GMT +1. The time now is 09:45 AM.

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