VBA 查找并返回不同列中的文本

问题描述 投票:0回答:1

我正在处理一个任务列表,其中有大约 1000 行的状态列 (H) 和截止日期列 (J)。从第7行开始

如果任务处于“已关闭”状态,则应在同一行但截止日期列中用文本“完成”覆盖日期

当然,我可以为每一行执行“If”和“Then”命令,但代码会太长。想到 Lookup 函数可能是一种快速而简单的方法,但我对 Lookup 函数不太熟悉。任何帮助将不胜感激。

我附上了一张图片以便更好地理解。

提前致谢 /马丁

excel vba lookup
1个回答
0
投票

第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
优化批量更新。

© www.soinside.com 2019 - 2024. All rights reserved.