0

我有以下名为Data的工作表: 在此处输入图像描述

在同一个工作簿中,我有另一个名为Employee Database的工作表。 在此处输入图像描述

在 Excel 中,如果“员工电子邮件地址”不在员工数据库中,如何将“员工电子邮件地址”以及数据工作表中相应的“公司”和“公司 URL”单元格着色为红色?

换句话说,我试图让员工数据库工作表看起来像这样: 在此处输入图像描述

我刚刚举了一个例子,实际上我有超过 10,000 个单元格的数据可以做到这一点。我开始手动执行此操作,并意识到这将花费我很长时间。

我想知道是否有一个宏可以在 Excel 中执行此操作?

非常感谢您的帮助!我有上面截图的示例工作簿可供下载: http ://www.mediafire.com/?dttztp66dvjkzn8

4

2 回答 2

2

您可以在没有 VBA 的情况下执行此操作,但需要对工作Data表上的数据稍作更改。

我不建议在 Excel 中使用“数据透视表”或“小计”式的数据存储方式,在这种情况下,您只需在一个列中输入一次主键,然后填写旁边的关联数据,直到下一个主键。

就像合并的单元格一样,这只会在您以后想要重新组织数据时导致问题。

这是我所做的:

填写数据表上缺少的电子邮件地址

A2将单元格一直突出显示到列BA中数据的末尾。因此,如果您在单元格中有公司名称,但只有来自的电子邮件,您应该突出显示。这是因为我们在每行可用数据中填写了电子邮件地址。B2:B100A2:A98A2:A100

转到编辑»查找和选择»转到特殊,选择Blanks并单击OK

去特别的,空白

现在选择空白,输入= (向上箭头) ,然后按Ctrl+ Enter。A 列中的空白单元格将填写缺少的电子邮件地址。突出显示 A 列,复制并粘贴值。

为电子邮件创建动态命名范围

Employee Database工作表上,在“引用”框中使用以下公式创建一个名为“电子邮件”的命名范围:

=OFFSET('Employee Database'!$C$1,1,0,COUNTA('Employee Database'!$C:$C)-1,1)

添加条件格式

Data工作表上,突出显示A2:C whatever(例如:)A2:C20000,然后转到主页»样式»条件格式并使用以下公式:

=ISNA(MATCH($A2,Emails,0))

选择所需的配色方案并单击OK。这是它在我的计算机上的外观以及一些示例数据:

突出显示未找到的样本数据

有一些小的限制:

  • 您不能再在工作表上将 A 列留空Data
  • 数据行之间的工作表上不能有空白行Employee Database。这是由于动态范围的工作方式。

好处

这种方法的好处是,IMO,巨大的。

  • 您可以在员工数据库表中添加或删除行,突出显示将自动调整。例如:如果我添加 d@gmail.com 并删除 c@nbc.com,表格上的格式会Data立即更新。

更新的员工数据库

  • 您不必更改现有的工作表结构(除了填写缺失的数据并添加范围名称)。无需额外的工作表。
  • 您的工作簿可以保持无 VBA(如果还没有的话)。
于 2012-07-09T15:47:11.873 回答
1

这是你正在尝试的吗?这将创建一个带有输出的新工作表“Desired Result”。将其粘贴到模块中。

Option Explicit

Sub Sample()
    Dim wsData As Worksheet, wsDB As Worksheet, wsO As Worksheet
    Dim lRow As Long, i As Long
    Dim clrRng As Range

    Set wsData = Sheets("Data")
    Set wsDB = Sheets("Employee Database")
    Set wsO = Sheets.Add

    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Desired Result").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0

    With wsO
        .Name = "Desired Result"
        wsData.Cells.Copy .Cells

        lRow = .Range("B" & .Rows.Count).End(xlUp).Row

        For i = 2 To lRow
            If .Range("A" & i).Value = "" Then .Range("A" & i).Value = .Range("A" & i - 1).Value
        Next i

        For i = 1 To lRow
            If Application.WorksheetFunction.CountIf(wsDB.Columns(3), .Range("A" & i).Value) = 0 Then
                If clrRng Is Nothing Then
                    Set clrRng = .Rows(i)
                Else
                    Set clrRng = Union(clrRng, .Rows(i))
                End If
            End If
        Next i

        If Not clrRng Is Nothing Then clrRng.Interior.ColorIndex = 3

        For i = lRow To 2 Step -1
            If .Range("A" & i).Value = .Range("A" & i - 1).Value Then .Range("A" & i).ClearContents
        Next i
    End With
End Sub
于 2012-07-08T23:28:51.150 回答