【问题标题】:VBA code to find, based on two criteria, and replace a value根据两个条件查找并替换值的 VBA 代码
【发布时间】:2020-08-06 13:15:36
【问题描述】:

我是 VBA 代码的初学者,所以还在学习,我有一个代码可以在一个单元格中搜索值,然后从另一个单元格更新另一个值。 但是我现在需要它根据两个条件进行搜索,如果它们匹配,那么我希望另一个单元格用输入的值进行更新。 我找到的代码是

For Each ssh In ThisWorkbook.Sheets
    If ssh.Name <> "Input" And ssh.Name <> "Calendar" And _
    ssh.Name <> "List" And ssh.Name <> "2020" Then
    ssh.Visible = True
    ssh.UnProtect
    Set fn = ssh.Range("B:B").Find(sh.Range("C20").Value, , xlValues, xlWhole)
    
        If Not fn Is Nothing Then
            adr = fn.Address
            Do
                 ssh.Range("C" & fn.Row) = sh.Range("E20").Value
                 Set fn = ssh.Range("B:B").FindNext(fn)
            Loop While adr <> fn.Address
        End If
    If fn Is Nothing Then
        cnt = cnt + 1
    End If
    ssh.Visible = False
    ssh.Protect
    End If

但我不知道如何修改这个? 条件值将分别位于搜索表上的单元格 C20 和 D20 以及列 B 和 A 中,如果它们匹配,则我需要使用 E20 中的值更新 C 列中的相应行

我希望这是足够的信息并且有意义...在此先感谢

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    真的只需要在循环中添加一个If 来检查第二个条件

    Dim skipSheets, ssh As Worksheet
    
    skipSheets = Array("Input", "Calendar", "List", "2020")
    
    For Each ssh In ThisWorkbook.Sheets
        If IsError(Application.Match(ssh.Name, skipSheets, 0)) Then
            ssh.Visible = True
            ssh.Unprotect
            Set fn = ssh.Range("B:B").Find(sh.Range("C20").Value, , xlValues, xlWhole)
            
            If Not fn Is Nothing Then
                adr = fn.Address
                Do
                    If fn.Offset(0, -1).Value = sh.Range("D20").Value Then
                        fn.Offset(0, 1).Value = sh.Range("E20").Value
                    End If
                    Set fn = ssh.Range("B:B").FindNext(fn)
                Loop While adr <> fn.Address
            End If
            
            If fn Is Nothing Then cnt = cnt + 1
            
            ssh.Visible = False
            ssh.Protect
        End If
    Next ssh
    

    【讨论】:

    • 谢谢 - 抱歉,fn.Offset(0, -1) 是什么意思?
    • 您好,我已经尝试过这段代码,但是现在我得到一个“编译错误:下一步没有 For”错误?
    • fn 是一个单元格,fn.Offset(0, -1) 是该单元格左侧的单元格(-1 列)
    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多