Код VBA для поиска по двум критериям и замены значения - PullRequest
0 голосов
/ 06 августа 2020

Я начинаю писать коды 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 соответственно на искомых листах, если они совпадают, то мне нужно, чтобы соответствующая строка в столбце C была обновлена ​​значением в E20

I надеюсь, что это достаточно информации и имеет смысл ... заранее спасибо

1 Ответ

0 голосов
/ 06 августа 2020

На самом деле просто нужно добавить If в ваш l oop, чтобы проверить второй критерий

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...