基于同一工作簿中另一个工作表的数据的工作表中的颜色单元格

时间:2012-07-08 22:06:45

标签: excel excel-vba excel-2007 excel-2010 vba

我有以下名为数据的工作表: enter image description here

在同一工作簿中,我有另一个名为员工数据库的工作表。 enter image description here

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

换句话说,我正在努力使员工数据库工作表看起来像这样: enter image description here

我刚刚给出了一个例子,实际上我有超过10,000个单元格的数据来做到这一点。我手动开始这样做,意识到它将永远带我。

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

我不建议在Excel中使用“数据存储表”或“小计”样式的数据存储,只需在一列中输入主键,然后在其旁边填写相关数据直到下一个主键。

与合并的单元格一样,只有在您想要重新整理数据时才会出现问题。

这就是我的所作所为:

在数据表

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

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

转到修改»查找&选择»转到特殊,选择Blanks,然后点击OK

go to special, blanks

现在选择了空白,键入= (向上箭头),然后按 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),然后转到主页»样式»< strong>条件格式并使用以下公式:

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

选择所需的配色方案,然后点击OK。以下是我在计算机上查看一些示例数据的方式:

highlight sample data not found

有一些小的限制:

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

优势

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

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

updated employee database

  • 您不必更改现有的工作表结构(填写缺失的数据和添加范围名称除外)。无需额外的工作表。
  • 您的工作簿可以保持VBA免费(如果它还没有)。