如何在 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
根据您的描述,这是您想要的结果。
我正在尝试在 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
根据您的描述,这是您想要的结果。