Excel 在两列中查找匹配项,将第三列中的数据与VBA进行比较

Excel 在两列中查找匹配项,将第三列中的数据与VBA进行比较,excel,vba,compare,multiple-columns,vlookup,Excel,Vba,Compare,Multiple Columns,Vlookup,我希望有人能帮忙。我正在比较主表和本地表之间的产品价格。当价格不匹配时,我需要标记。主表包含所有可能的产品,但本地表不包含,因此首先我需要根据产品代码匹配产品,然后根据结果匹配价格。虽然我愿意接受建议,但VLookup并没有让我达到我想要的目的,所以我尝试了以下代码: Sub match_price() Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = ActiveSheet Set ws2 = Worksheets("master")

我希望有人能帮忙。我正在比较主表和本地表之间的产品价格。当价格不匹配时,我需要标记。主表包含所有可能的产品,但本地表不包含,因此首先我需要根据产品代码匹配产品,然后根据结果匹配价格。虽然我愿意接受建议,但VLookup并没有让我达到我想要的目的,所以我尝试了以下代码:

Sub match_price()

Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = ActiveSheet
Set ws2 = Worksheets("master")

For Each i In ws1.Range("A2:A100")
    For Each C In ws2.Range("A2:A75")
        If i.Cells.Value = C.Cells.Value Then
        ws1.Range("C2:C10").Select
      End If
     Next C
    Next i
    For Each i In ws1.Range("C2:C100")
        For Each C In ws2.Range("C2:C75")
        If i.Cells.Value < C.Cells.Value Then
         i.Cells.Interior.ColorIndex = 3
        End If
    Next C
    Next i
End Sub
编辑2:我的决议:

如果有人感兴趣,我用我的Vlookup代码录制了一个宏,并为标记添加了user2140261条件格式。我只想突出显示文本,所以我去掉了单元格本身的颜色。我应该提到,我需要使用VBA,因为我需要在许多单元格和工作表中进行其他类型的计算,但user2140261突出显示解决方案帮助我将Vlookup带到了需要的位置。谢谢你的帮助

Sub Macro()
'
'I always select D2 as the default active cell.
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],master,3,FALSE)"
    Selection.AutoFill Destination:=Range("D2:D10"), Type:=xlFillDefault
    Range("C2:C10").Select
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
        Formula1:="=D2"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub
根据您的样品,将范围调整为套件。在本地工作表的D列中输入并向下拖动。然后突出显示使用条件格式,其中C中的值小于D中的值

下面是您的示例数据的副本。在本地工作表上

在图中,您可以看到VLOOKUP返回所有匹配行中的值

要突出显示这些值,需要使用条件格式:

请注意,在屏幕截图中,您必须选择要高亮显示的所有数据。然后在公式框中输入

=D2
确保如果您尝试单击单元格D2,且公式变为
=$D$2
,则必须删除推拉符号(
$

最终数据如下所示:

115
240
均为红色,因为它们小于从母版纸上获取的值。而
19
不是因为它只等于母版纸上的值

从您的编辑到您的问题,我认为您可以将宏缩短一点,这也将大大加快速度。您应该尽可能避免使用select函数。尽管VBA中存在一个奇怪的错误,即无论您如何在VBA中输入单元格引用,它始终被视为行-列引用,而不是实际引用。尽管如此,如果将来你在更大范围内使用它,这应该会稍微清理一下你的例子,并有助于提高速度

Sub Macro()
    Range("D2:D10").FormulaR1C1 = "=VLOOKUP(RC[-3],master,3,FALSE)"
    With Range("C2:C10")
        .Select
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
          Formula1:="=D2"
        .FormatConditions(1).Font.Color = -16383844
    End With
End Sub

这似乎正是VLookup应该能够做到的。你能用你的两张工作表中的例子更新你的问题吗?然后我认为应该可以创建一个简单的、公式驱动的解决方案。@JohnBustos公式不能突出显示单元格,尽管公式可以向单元格添加一个值,条件格式可以基于该值。我添加了一些示例数据。谢谢你的评论。哇,感谢用户的详细回答,尽管我知道如何使用Vlookup。我现在正在测试VBA格式的条件格式,很快就会回来。@TracyPhillip对我的答案进行了编辑,以反映您录制的宏,并尝试帮助它。
=D2
Sub Macro()
    Range("D2:D10").FormulaR1C1 = "=VLOOKUP(RC[-3],master,3,FALSE)"
    With Range("C2:C10")
        .Select
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
          Formula1:="=D2"
        .FormatConditions(1).Font.Color = -16383844
    End With
End Sub