Как эффективно использовать операторы If с несколькими условиями в VBA, сравнивая пользовательский ввод с диапазоном? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать своего рода автоматический тест в Excel.

У меня есть 5 значений в Sheet1, которые вводятся пользователем в ячейках E5:E9. Затем их следует сравнить с диапазоном еще 5 ячеек в Sheet2 (также ячеек E5:E9).

Поскольку пользователь не всегда может перечислять эти записи в том же порядке, что и в моем диапазоне Sheet2, я решил, что должен циклически проходить через диапазон для ввода каждой ячейки.

Следующим шагом будет возможность игнорировать значение в диапазоне, как только будет найдено совпадение, но мне нужно, чтобы эта часть работала правильно. В настоящее время значения абсолютно совпадают. Тем не менее, я не получаю правильный вывод.

Sub Q1()

    Dim i As Integer
    For i = 5 To 9
        If (Sheet1.Cells(5, 5) = Sheet2.Cells(i, 5)) And (Sheet1.Cells(6, 5) = Sheet2.Cells(i, 5)) And (Sheet1.Cells(7, 5) = Sheet2.Cells(i, 5)) And (Sheet1.Cells(8, 5) = Sheet2.Cells(i, 5)) And (Sheet1.Cells(9, 5) = Sheet2.Cells(i, 5)) Then
            Sheet1.Cells(5, 6) = 1
            Exit For
        Else
            Sheet1.Cells(5, 6) = 0
        End If
    Next

End Sub

Я бы ожидал, что выход от 1 до Sheet1 ячейка E6, но в настоящее время я получаю 0. Спасибо!

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Маленький комплекс :) ​​

Sub Q1()

Dim i As Integer
Dim j As Integer

Dim chck(5 To 9) As Boolean

For i = 5 To 9

    For j = 5 To 9

        If Sheet1.Cells(i, 5) = Sheet2.Cells(j, 5) Then

            chck(i) = True
            Exit For
        Else: chck(i) = False

        End If
    Next

Next

j = 0

For i = LBound(chck) To UBound(chck)

    If chck(i) = True Then j = j + 1

Next

If j = 5 Then
Sheet1.Cells(5, 6) = 1
Else: Sheet1.Cells(5, 6) = 0
End If

End Sub
0 голосов
/ 26 июня 2019

Это действительно должен быть VBA?Формула может выполнить этот расчет.Используйте это в ячейке «Лист1» F5:

=--(SUMPRODUCT(COUNTIF(Sheet2!E5:E9,E5:E9))>0)

Если хотя бы одно из значений в «Лист1»! E5: E9 (введенные пользователем значения) существует в вашем «Листе 2»! E5: E9 список, формула вернет 1 else 0, который является желаемым результатом, основанным на вашем описании.

...