温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How to Loop Through one Range in VBA Excel and Update Another
excel if-statement vba range

其他 - 如何在VBA Excel中遍历一个范围并更新另一个

发布于 2020-03-27 11:26:56

我有一个宏,它在一个范围内筛选单元格,并且当该单元格或其相邻单元格为红色或绿色时,它将为另一个单元格及其另一个工作表中的相邻单元格分配一个值。到目前为止,我认为第一部分是可行的,但是第二个“循环”我自己却无法解决。换句话说,在下面的代码中,我希望Range(“ C1”)和Range(“ D1”)更新为Range(“ C2”)和Range(“ D2”),依此类推。

Sub AutoTrack()

   Dim rng As Range

   Dim cell As Range

   Set rng = Workbooks("Test").Worksheets("Track").Range("I2:I10")

   For Each cell In rng
   If cell.DisplayFormat.Interior.Color = RGB(146, 208, 80) Or cell.Offset(0, 
    1).DisplayFormat.Interior.Color = RGB(146, 208, 80) Then

Worksheets("Result").Range("D1") = 
    WorksheetFunction.MRound(Worksheets("Track").Range("J2").Value + 0.125, 
     0.125)
    Worksheets("Result").Range("C1") = 
    WorksheetFunction.MRound(Worksheets("Result").Range("D1") - 0.75, 0.125)

ElseIf 

   Worksheets("Track").Range("J2").DisplayFormat.Interior.Color = RGB(255, 0, 0) 
   Or Worksheets("Track").Range("I2").DisplayFormat.Interior.Color = RGB(255, 0, 
   0) Then
    Worksheets("Result").Range("C1") = WorksheetFunction.MRound(Worksheets("Track").Range("I2") - 0.125, 0.125)
    Worksheets("Result").Range("D1") = 
    WorksheetFunction.MRound(Worksheets("Result").Range("C1") + 0.75, 0.125)
    End If
    Next cell

End Sub

查看更多

查看更多

提问者
Robert
被浏览
181
SJR 2019-07-03 23:29

最简单的方法可能是使用offset和一个计数器,该计数器在循环的每次迭代中都增加1。

如果要增加偏移量,则无论是否满足任一条件,都可以i在If之外增加

Sub AutoTrack()

Dim rng As Range
Dim cell As Range
Dim i As Long

Set rng = Workbooks("Test").Worksheets("Track").Range("I2:I10")

For Each cell In rng
    If cell.DisplayFormat.Interior.Color = RGB(146, 208, 80) Or cell.Offset(0, 1).DisplayFormat.Interior.Color = RGB(146, 208, 80) Then
        Worksheets("Result").Range("D1").Offset(i) = WorksheetFunction.MRound(cell.Offset(, 1).Value + 0.125, 0.125)
        Worksheets("Result").Range("C1").Offset(i) = WorksheetFunction.MRound(Worksheets("Result").Range("D1").Offset(i) - 0.75, 0.125)
        i = i + 1
    ElseIf cell.Offset(, 1).DisplayFormat.Interior.Color = RGB(255, 0, 0) Or cell.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
        Worksheets("Result").Range("C1").Offset(i) = WorksheetFunction.MRound(cell - 0.125, 0.125)
        Worksheets("Result").Range("D1").Offset(i) = WorksheetFunction.MRound(Worksheets("Result").Range("C1").Offset(i) + 0.75, 0.125)
        i = i + 1
    End If
Next cell

End Sub