Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Excel / Programming / September 2007

Tip: Looking for answers? Try searching our database.

Nested Do Until Loop

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
PJFry - 19 Sep 2007 18:30 GMT
I have a static array, AI2:AI37 that holds a list of department numbers that
I compare to another column of department numbers.  The code below checks to
see if the department in cell AI42 matches the deparment in cell AI2.  If it
does, change the value to 'MATCH TO DEPARTMENT' and move the the next cell
and compare to AI2. If no match, move to the next cell and compare to cell
AI2.

Sub DeptCompare()
Range("AI42").Select

Do Until IsEmpty(ActiveCell)
          If ActiveCell = Range("AI2") Then
           ActiveCell = "MATCH TO DEPARTMENT"
           ActiveCell.Offset(1, 0).Select
       Else
           ActiveCell.Offset(1, 0).Select
       End If
   Loop.
End Sub

This portion works fine.  What I want to do is nest this loop in another
loop that moves down by one cell in the static array.  I would replace
Range("AI2") with Range("AI3").  This pattern would continue until the code
encounters an empty cell.  

Something like this

Sub DeptCompare()

Do Until (The code encounters an empty cell in the static array)

    'Selects the first cell in the department list being compared to the
array.
    Range("AI42").Select
   
    'Loop throught the departement list being compared to the array
    Do Until IsEmpty(ActiveCell)
                If ActiveCell = Range("AI2") Then
                ActiveCell = "MATCH TO DEPARTMENT"
                ActiveCell.Offset(1, 0).Select
            Else
                ActiveCell.Offset(1, 0).Select
            End If
        Loop

Move down 1 row to the next cell in the static array
Loop

End Sub

Thoughts?

Thanks in advance!
PJ
Jim Thomlinson - 19 Sep 2007 18:52 GMT
There is only one active cell so you are really best off to use range objects
and move those around since you can have as many of those as you want. Try
something like this...

Sub DeptCompare()
dim rngTop as range
Dim rngBottom as range

set rngtop = Range("AI2")
set rngBottom = range("AI42")

Do until isempty(rngtop.value)
 Do Until isempty(rngbottom.value)
   if rngtop.value = rngbottom.value then
       rngbottom.value = "MATCH TO DEPARTMENT"
   end if
   set rngbottom = rngbottom.offset(1,0)
 Loop
 Set rngTop = rngTop.offset(1,0)
loop
End Sub

Untested but it should be close...
Signature

HTH...

Jim Thomlinson

> I have a static array, AI2:AI37 that holds a list of department numbers that
> I compare to another column of department numbers.  The code below checks to
[quoted text clipped - 50 lines]
> Thanks in advance!
> PJ
Jim Thomlinson - 19 Sep 2007 18:58 GMT
Oops that is not gonna work. Range Bottom will get messed up... Try this...

Sub DeptCompare()
dim rngTop as range
Dim rngBottom as range

set rngtop = Range("AI2")

Do until isempty(rngtop.value)
 set rngBottom = range("AI42")
 Do Until isempty(rngbottom.value)
   if rngtop.value = rngbottom.value then
       rngbottom.value = "MATCH TO DEPARTMENT"
   end if
   set rngbottom = rngbottom.offset(1,0)
 Loop
 Set rngTop = rngTop.offset(1,0)
loop
End Sub

Signature

HTH...

Jim Thomlinson

> There is only one active cell so you are really best off to use range objects
> and move those around since you can have as many of those as you want. Try
[quoted text clipped - 74 lines]
> > Thanks in advance!
> > PJ
PJFry - 20 Sep 2007 21:10 GMT
Jim,

Thanks for the response.  Your answer gave me the missing piece for the
method I had originally tried.  I wanted to create a starting point and loop
from there, but I could not declare the starting point.  The answer was the
Set function.  I was doing this:

Starting = Range("AI2")

Once I added the Set in there, it worked like charm.

Thanks!
PJ

> Oops that is not gonna work. Range Bottom will get messed up... Try this...
>
[quoted text clipped - 94 lines]
> > > Thanks in advance!
> > > PJ
Bob Phillips - 19 Sep 2007 18:56 GMT
Sub DeptCompare()
Dim i As Long
Dim iRow As Long
   For i = 42 To Cells(Rows.Count, "AI").End(xlUp).Row
       iRow = 0
       On Error Resume Next
       iRow = Application.Match(Cells(i, "AI").Value, Range("AI2:AI37"), 0)
       On Error GoTo 0
       If iRow > 0 Then Cells(i, "AI").Value = "MATCH TO DEPARTMENT"
   Next i
End Sub

Signature

---
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)

>I have a static array, AI2:AI37 that holds a list of department numbers
>that
[quoted text clipped - 54 lines]
> Thanks in advance!
> PJ
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.