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

问题描述

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

我有 5 个值Sheet1由用户在单元格中输入E5:E9。然后应该将这些与Sheet2(也是 cells E5:E9)中的 5 个以上单元格的范围进行比较。

由于用户可能并不总是按照我在 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。谢谢!

标签: excelvbamatching

解决方案


小复杂:)

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

推荐阅读