在单元格中匹配一个列表中的值我有,并做到它下面的每个单元格(标题不好)

我想macros/代码采取在该单元格(相对参考我猜)中input的产品,并扫描我有产品的列表。 如果不匹配,我希望消息框告诉我哪个产品input与我的产品列表中的产品不匹配,并返回它input的行号。

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

这可能需要循环。 因为我将在该专栏中列出大约500个单元格的范围,所以我希望它可以通过列表来search该产品。

右键单击工作表选项卡 – >查看代码 – >并将下面给出的代码粘贴到打开的代码窗口中 – >closuresVB编辑器 – >将工作簿保存为启用macros的工作簿。 下面的代码假定您在Sheet2上有一个名为“List”的命名区域(代码名称不是选项卡名称)。 如果从第2行开始在列A中input值,则代码将自动检查您input的值是否在指定的范围列表中find,如果未find该值,将popup一个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 

编辑:

用以下代码replace上面提出的代码。 如果您一次更改多个单元格,并且将向您提供在名为范围的列表中找不到的所有值的列表,下面的代码将很有用。

 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 

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

 =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")