遍历范围

我有一个通过或未通过validation(BA)的单元格。 如果用户从下拉列表中selectPass ,则unit passed all tests显示在另一个单元格(N)中。 我已经习惯于这样做的VBA按预期工作:

在Worksheet_Change上

 If Range("BA17").Value = "Pass" Then Range("N44").Value = "Unit passed all tests." If Range("BA18").Value = "Pass" Then Range("N45").Value = "Unit passed all tests." If Range("BA19").Value = "Pass" Then Range("N46").Value = "Unit passed all tests." 

可以压缩这个,因为最后一张纸最多有25-30行吗?

我尝试添加一个范围,即(“BA17:BA40”),但是每次更新所有的字段,这是不理想的。

这将更新列N(行偏移27)值“单元通过所有testing”。 如果BA列中只有一个单元格被更新,并且当前行> 17

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) With Target If .CountLarge = 1 And .Column = Range("BA1").Column And .Row > 17 Then If .Value2 = "Pass" Then Application.EnableEvents = False .Offset(27, Range("N1").Column - .Column).Value = "Unit passed all tests." Application.EnableEvents = True End If End If End With End Sub 

避免多个条目循环的选项

 Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Set rng1 = Intersect(Target, [BA17:BA40]) If rng1 Is Nothing Then Exit Sub Application.EnableEvents = False With rng1.Offset(27, -39) .FormulaR1C1 = "=IF(R[-27]C[39]=""Pass"",""Unit passed all tests."","""")" .Value = .Value End With Application.EnableEvents = True End Sub