excel函数,用于在多个工作表上与多个列进行比较时突出显示一列中的唯一值

时间:2015-01-09 13:00:41

标签: excel vba excel-vba unique conditional-formatting

好的我正在使用Excel工作簿来管理我们产品的物料清单BOM。我在一个工作簿中有几个特定于产品的工作表和一个库存表。

发布新BOM时,所有库存都会手动添加到“库存”表中。

我想找一种方法来搜索仅存在于库存表中的所有零件编号。

基本上它的产品已经停产。手动找到这些零件号是一件痛苦的事。

我想查找清单上的零件#列所特有的所有项目。这些独特的项目不会退出任何其他工作表上的部分#列。

因此,我需要搜索整个工作簿并突出显示那些“孤立”的工作簿然后可以从此工作表中轻松删除。

我无法弄清楚如何使用VBA函数来执行此操作或如何使用条件格式执行此操作。

零件编号可以是字母数字值的混合。

我可能希望excel像关系数据库一样运行得太多但是我可以做梦我不能!!

提前感谢您的帮助。

抱歉,我还没有上传图片的声誉。我提供了屏幕截图的下载链接。

https://gofile.me/2rhXY/tPMTm9OF

这是一个代码示例:这是使用推荐的VB模块。此公式仅适用于数值。

https://gofile.me/2rhXY/fjoSA3iI

这是日期所依据的标签。它应该是找到这个值但不是。

斯科特

2 个答案:

答案 0 :(得分:0)

假设库存工作表实际上名为库存,并且'几个产品特定表'有一个公共部分没有列,这应该在帮助列中适用于您在库存工作表上可以过滤或作为条件格式规则中的公式。

点击 Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + 中号)。将以下内容粘贴到标题为 Book1 - Module1(Code)的新窗格中。

Public Function bDiscontinued(rPART As Range, rSRCH_COL As Range) As Boolean
    Dim sPart As String, sAddress As String, ws As Long
    sPart = rPART.Value
    sAddress = rSRCH_COL.Address(0, 0)
    bDiscontinued = True
    For ws = 1 To Worksheets.Count
        With Worksheets(ws)
            If .Name <> "Inventory" Then
                If Not IsError(Application.Match(sPart, .Range(sAddress), 0)) Then
                    bDiscontinued = False
                    Exit For
                End If
            End If
        End With
    Next ws
End Function

编辑包含Inventory的行,以适合您不想搜索的工作表的实际名称。点击 Alt + Q 返回工作表。

语法很简单,

=bDiscontinued(<part no to look for>, <common column of part nos in other worksheets>)

示例:如果您的库存工作表的第A行中的部件编号从第2行开始,而所有其他工作表上的部件编号在B列中,则将此公式放入库存工作表第2行的未使用列中。

=bDiscontinued($A2, $B:$B )

根据需要填写。可以针对TRUE过滤此新列,以显示可以删除的所有已停止的部分。

如果突出显示行的简单条件格式足够,则可以在CF规则中使用相同的公式,其中适用于:的A2:Z9999。如果适用于:为$ A:$ Z,则将公式更改为=bDiscontinued($A1, $B:$B )

答案 1 :(得分:0)

通过“新规则&gt;使用公式确定要格式化的单元格”设置条件格式。假设您要突出显示唯一值的范围是A1:A99,请使用以下公式:= COUNTIF($ A $ 1:$ A $ 99,$ A1)= 1.