首页 文章

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

提问于
浏览
0

我有以下工作表 Data
enter image description here

在同一个工作簿中,我有另一个名为 Employee Database 的工作表 .
enter image description here

在Excel中,如果"Employee E-mail Address"不在 Employee Database 中,如何从 Data 工作表中为"Employee E-mail Address"和相应的"Company"和"Company URL"单元格着色?

换句话说,我试图让 Employee Database 工作表看起来像这样:
enter image description here

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

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

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

2 回答

  • 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

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

    我不建议在Excel中使用"Pivot Table"或"Subtotal"样式的数据存储,只需在一列中输入一次主键,然后在其旁边填充相关数据,直到下一个主键 .

    与合并单元格一样,只有在您想要重新组织数据时才会出现问题 .

    这是我做的:

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

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

    转到 Editing » Find & Select » Go To Special ,选择 Blanks 并单击 OK .

    go to special, blanks

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

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

    Employee Database 工作表上,使用"Refers to"框中的以下公式创建名为"Emails"的命名范围:

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

    添加条件格式

    Data 表上,突出显示 A2:C whatever (例如: A2:C20000 ),然后转到 Home » Styles » Conditional Formatting 并使用以下公式:

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

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

    highlight sample data not found

    有一些小的限制:

    • 您不能再将列A留空 Data 表 .

    • 在数据行之间 Employee Database 表上不能有空行 . 这是由于动态范围的工作方式 .

    好处

    IMO这种方法的好处是巨大的 .

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

    updated employee database

    • 您不必更改现有的工作表结构(填写缺失的数据和添加范围名称除外) . 无需额外的工作表 .

    • 您的工作簿可以保持VBA免费(如果它还没有) .

相关问题