我有一个宏,它在一个范围内筛选单元格,并且当该单元格或其相邻单元格为红色或绿色时,它将为另一个单元格及其另一个工作表中的相邻单元格分配一个值。到目前为止,我认为第一部分是可行的,但是第二个“循环”我自己却无法解决。换句话说,在下面的代码中,我希望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
最简单的方法可能是使用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
SJR,如果
"J2"
and 语句"I2"
的第一行中的IF
和ELSEIF
是静态的,则它们可以。但是第二行中的范围不是静态的,并且必须为每个循环递增,@GMalc-我刚刚修改了代码以删除所有静态引用,但是由于在此方面的问题尚不清楚,因此它可能不正确。不完全确定“每个循环必须递增”是什么意思?
SJR,只是指出您错过了`WorksheetFunction.MRound(Worksheets(“ Result”)。Range(“ C1”)'中的偏移量
好,谢谢,我想现在就在那里。
@ SJR-谢谢,当我在等号的右侧也添加了Offset(i)时起作用。