如何在 VBA 中有效地使用具有多个条件的 If 语句,将用户输入与范围进行比较?

How can I effectively use If statements with multiple conditions in VBA, comparing user input to a range?

我正在尝试在 Excel 中创建各种自动评分测试。

我在 Sheet1 中有 5 个值,由用户在单元格 E5:E9 中输入。然后应将这些与 Sheet2 中的另外 5 个单元格(也是单元格 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。谢谢!

有点复杂:)

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

这真的需要 VBA 吗?公式可以执行此计算。在 'Sheet1' 单元格 F5:

中使用它
=--(SUMPRODUCT(COUNTIF(Sheet2!E5:E9,E5:E9))>0)

如果 'Sheet1'!E5:E9(用户输入的值)中的至少一个值存在于您的 'Sheet2'!E5:E9 列表中,则公式将 return a 1 else 0 根据您的描述,这是您想要的结果。