简体   繁体   中英

Loop in different ranges VBA

Code below works good, but it needs modernization. This code for one table, it works until the end of table. But I added addition table at the same page below actual (exist) table. I need jumping i (loop) through 3 empty cells and start code for next table below. In another words, to find next table below and implement code there too. How to implement (realize) that?

Sub Test()
Dim score1 As Double, score2 As Double, score3 As Double, result As String, text As String

Dim ifrom As Long, ito As Long
Dim i As Long

ifrom = 2
ito = Range("E2").End(xlDown).Row ' find the row above the 1st blank cell in column E

name1 = "A"       
name2 = "B"    
audit = "C"      
currenc = "Dollars"       


For i = ifrom To ito

    text = Range("E" & i).Value
    score1 = Int(Range("B" & i).Value)
    score2 = Int(Range("C" & i).Value)
    score3 = Int(Abs(Range("D" & i).Value))


If score1 = 0 And score2 = 0 Then
    result = text + ......

ElseIf score1 = score2 Then
    result = text +........

ElseIf score1 > score2 And score2 <> 0 Then
    result = text + ............

ElseIf score1 < score2 And score1 <> 0 Then
    result = text +......

Else
    result = text + " 00000000"

End If

Range("H" & i).Value = result
Next i
End Sub

Try this:

Sub Test()

    '... Define your variables ....

    Dim LastRow As Long
    LastRow = Range("E" & Rows.Count).End(xlUp).Row

    name1 = "A"
    name2 = "B"
    audit = "C"
    currenc = "Dollars"

    ifrom = 2
    Do
        ito = Range("E" & ifrom).End(xlDown).Row ' find the row above the 1st blank cell in column E

        For i = ifrom To ito
            '... Your code comes here ...
        Next i
        ifrom = Range("E" & ifrom).End(xlDown).Row ' find top of next table, if no table return last row of worksheet
    Loop While ifrom < LastRow
End Sub

Also because your formulas are related just to same row you can try following which is more simple:

Sub Test()
    Dim score1 As Double, score2 As Double, score3 As Double, result As String, text As String

    Dim ifrom As Long, ito As Long
    Dim i As Long

    ifrom = 2
    ito = Range("E" & Rows.Count).End(xlUp).Row 'This row changed

    name1 = "A"
    name2 = "B"
    audit = "C"
    currenc = "Dollars"

    For i = ifrom To ito
        If Range("E" & i).Value <> "" Then
            '.... Your code goes here
        End If
    Next i
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM