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

时间:2013-05-20 21:11:08

标签: 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")

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

但是,我的解决方案并没有意识到这些差异,我怀疑这是因为它并没有完全认识到差异应该只基于匹配的产品。感谢任何帮助,提前谢谢。

修改

SAMPLE DATA

Master Sheet

ID          Descrip     Invoice
14562738    A   119
25364058    B   245
26584024    C   375
67489542    D   19

Local Sheet
ID          Descrip Invoice
14562738    A   115
25364058    B   240
67489542    D   19

编辑2:我的决议:

如果有人感兴趣,我用Vlookup代码记录了一个宏,并为标记添加了user2140261条件格式。我只是想突出显示文本,所以我删除了单元格本身的颜色。我应该提到我需要使用VBA,因为我需要在许多单元格和工作表中进行其他类型的计算,但是用户2140261突出显示解决方案帮助我将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

1 个答案:

答案 0 :(得分:0)

=VLOOKUP(A2,Master!A2:C5,3,FALSE)

根据您的Sample调整范围到套件。在本地工作表的D列中输入,然后向下拖动。然后突出显示使用条件格式,其中C中的值是&lt; D中的值

以下是您的样本数据的副本。在工作表本地。

Sample

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

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

Sample2

请注意,在SCreen镜头中,您必须选择要突出显示的所有数据。然后在公式框中输入

=D2

确保如果您尝试点击单元格D2并且公式变为=$D$2那么您 必须 删除Doller标志($

您的最终数据如下所示:

Sample3

115240都是红色的,因为它们小于从主表格中获取的值。并且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