#1
|
|||
|
|||
How do you loop through an array with some empty values?
Hello,
This seems like a very simple question, but I can't figure it out. I am looping through a string array, looking for the part of the array which contains a "/" mark Code:
i=0 Do Until i > 10 If splitslash(i) Like "*[/]*" Then Range("H4").Value = splitslash(i) End If i = i + 1 Loop End If |
#2
|
||||
|
||||
How long has the Like operator been around?! I never knew it existed. Oh, in SQL, of course, but not in VBA. Guess I have some more reading to do. Alas, I thought by now I knew everything.
Anyway, you could intercept the error and handle it manually, but that's a pain. What you want is the UBound function. UBound(splitslash) returns the upper bound of the first dimension of the array named 'splitslash'. An optional second argument specifies other dimensions, in case splitslash has more than one. So you'd run the loop like this: Code:
For i = 1 to UBound(splitslash) If splitslash(i) Like "*[/]*" Then Range("H4").Value = splitslash(i) next i Code:
r=1 For i = 1 to UBound(splitslash) If splitslash(i) Like "*[/]*" Then r = r + 1 Cells(r, 8).Value = splitslash(i) End If next i |
#3
|
||||
|
||||
Actually, you'd ordinarily use:
Code:
Sub Demo() Dim i As Long For i = 0 To UBound(splitslash) If splitslash(i) Like "*[/]*" Then Range("H4").Value = splitslash(i) Exit For End If Next i End Sub Code:
Sub Demo() Dim i As Long For i = LBound(splitslash) To UBound(splitslash) If splitslash(i) Like "*[/]*" Then Range("H4").Value = splitslash(i) Exit For End If Next i End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#4
|
||||
|
||||
(Further explanation:) Omaha, Paul included an Exit statement, which is correct if you want to stop once you find "the" value with the slash in it. My version assumes there are multiple values you want to save, and keeps looking through the whole array.
As for the starting point of the array, that depends on how you defined the array. What Paul's saying is that if you define an array like this: Code:
Dim splitslash(10) Code:
Dim splitslash(0 to 10) But no matter what you specified when you defined the array, you can always have your program use the LBound function, which mirrors UBound: Code:
For i = LBound(splitslash) To UBound(splitslash) |
#5
|
||||
|
||||
Quote:
Code:
Dim splitslash splitslash = Array("one", "two", "three")
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#6
|
|||
|
|||
Thanks guys! I now have plenty of methods to try
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
CORREL function with a constant array | j2b3 | Excel | 3 | 01-30-2013 01:49 AM |
Convert String Array to Integer Array from a User Input? | tinfanide | Excel Programming | 4 | 12-26-2012 08:56 PM |
Apparently empty (blank) cells aren't empty | daymaker | Excel | 3 | 03-08-2012 03:41 PM |
How to reserve an array in a public function? | tinfanide | Word VBA | 2 | 02-27-2012 06:51 AM |
Complex array formula | andrei | Excel | 9 | 02-03-2012 03:40 AM |