我正在处理一个任务列表,其中有大约 1000 行的状态列 (H) 和截止日期列 (J)。从第7行开始
如果任务处于“已关闭”状态,则应在同一行但截止日期列中用文本“完成”覆盖日期
当然,我可以为每一行执行“If”和“Then”命令,但代码会太长。想到 Lookup 函数可能是一种快速而简单的方法,但我对 Lookup 函数不太熟悉。任何帮助将不胜感激。
我附上了一张图片以便更好地理解。
提前致谢 /马丁
第1步:首先运行一次InitialUpdate以更新所有J列数据。
Sub InitialUpdate()
Dim rngData As Range, arrData
Dim lastRow As Long, i As Long
lastRow = ActiveSheet.Cells(Me.Rows.Count, "H").End(xlUp).Row
Set rngData = ActiveSheet.Cells(7, "H").Resize(lastRow - 7 + 1, 3)
arrData = rngData.Value
For i = 1 To UBound(arrData)
If UCase(arrData(i, 1)) = "CLOSED" Then
arrData(i, 3) = "Done"
End If
Next
' Disable change event
Application.EnableEvents = False
rngData.Value = arrData
Application.EnableEvents = True
End Sub
第 2 步:实施
Worksheet_Change
,处理持续的日常输入。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, rngData As Range, arrData
Dim cell As Range
Set c = Application.Intersect(Target, Me.Columns("H"))
If Not c Is Nothing Then
Application.EnableEvents = False
For Each cell In c
If UCase(cell.Value) = "CLOSED" Then
cell.Offset(0, 2) = "Done"
End If
Next
Application.EnableEvents = True
End If
End Sub
注意:
Worksheet_Change
可以验证整个H列每个输入。我更喜欢使用 InitialUpdate
优化批量更新。