我在列表中匹配的单元格中的值,并且也可以对其下的每个单元格进行匹配(标题不好)

时间:2017-03-29 18:54:37

标签: excel vba

我希望宏/代码能够获取在该单元格中输入的产品(我猜相对参考)并扫描我拥有的产品列表。如果它不匹配,我希望消息框告诉我输入的产品与我的产品列表中的产品不匹配,并返回其输入的行号。

所以给你另一个例子。假设我们将在单元格中输入数字“1”。我需要宏来搜索我的数字列表1-100,如果1不在那里我想告诉我。假设输入的下一个数字(在下面的单元格中)是101.一个消息框告诉我101不在我的号码列表中,它位于第2行。

它可能需要循环。由于我将在该列中删除大约500个单元格,我希望它能够使用列表搜索该产品。

2 个答案:

答案 0 :(得分:3)

右键单击工作表标签 - >查看代码 - >并将下面给出的代码粘贴到打开的代码窗口中 - >关闭VB编辑器 - >将工作簿另存为启用宏的工作簿。 以下代码假定您在Sheet2上有一个名为“List”的命名范围(代码名称不是选项卡名称)。 如果您从第2行开始在A列中输入值,代码将自动检查您输入的值是否在命名范围列表中找到,如果找不到该值,则会弹出一个msgbox以提供一些信息

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
If Target.Column = 1 And Target.Row > 1 Then
    If Target <> "" Then
        If Application.CountIf(Sheet2.Range("List"), Target.Value) = 0 Then
            MsgBox "The value " & Target.Value & " you entered in cell " & Target.Address(0, 0) & " was not found in the List", vbExclamation, "Item Not Found!"
        End If
    End If
End If
End Sub

修改

使用以下代码替换上面提出的代码。 如果您一次更改多个单元格,则以下代码将非常有用,并且将为您提供列表命名范围中未找到的所有值的列表。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim str As String
Dim Found As Boolean
str = "The following values were not found in the List." & vbNewLine & vbNewLine
If Target.Column = 1 And Target.Row > 1 Then
    For Each cell In Target
        If cell <> "" Then
            If Application.CountIf(Sheet2.Range("List"), cell.Value) = 0 Then
                Found = True
                str = str & cell.Address(0, 0) & " : " & cell.Value & vbNewLine
            End If
        End If
    Next cell
End If
If Found Then MsgBox str, vbExclamation, "Values Not Found!"
End Sub

答案 1 :(得分:0)

你可以使用公式得到你想要的。

=IFERROR(MATCH(PRODUCT,LISTofPRODUCTS,0),"Not Found In List")

使用实际单元格引用的相同公式:

=IFERROR(MATCH(A1,$B$1:$B$500,0),"Not Found In List")

您要查找的值位于单元格A1中,而您要查看的列表是B1:B500

要知道未匹配值在哪一行,您可以使用此公式

=IF(ISERROR(MATCH(A1,$B$1:$B$500,0)),"Found","Value in row " & ROW(A1) & " not found")