Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果值不同,则获取颜色_Excel_Vba_Conditional Formatting - Fatal编程技术网

Excel 如果值不同,则获取颜色

Excel 如果值不同,则获取颜色,excel,vba,conditional-formatting,Excel,Vba,Conditional Formatting,我需要您的帮助,我有下面的代码来比较不同工作表中的一列,如果工作表“B”列A(旧更新)中缺少某个值,则该值将在工作表“A”列A(值更新)中突出显示 现在: 工作表“A”中的A列和工作表“B”中的A列具有相同的值(固定),我想比较工作表“A”中的F列和工作表“B”中的H列的值(这些值来自工作表“C”中的vlookup),如果有不同的值,则应在工作表“A”中突出显示单元格值 (工作表“C”不应作为编码的一部分) 我很迷茫,你能帮我吗? (我想以私人助理的身份申请) 端接头 我无法添加想象不知道为

我需要您的帮助,我有下面的代码来比较不同工作表中的一列,如果工作表“B”列A(旧更新)中缺少某个值,则该值将在工作表“A”列A(值更新)中突出显示

现在:

  • 工作表“A”中的A列和工作表“B”中的A列具有相同的值(固定),我想比较工作表“A”中的F列和工作表“B”中的H列的值(这些值来自工作表“C”中的vlookup),如果有不同的值,则应在工作表“A”中突出显示单元格值
(工作表“C”不应作为编码的一部分)

我很迷茫,你能帮我吗? (我想以私人助理的身份申请)

端接头

我无法添加想象不知道为什么,我将尝试用文字:

当前代码适用于以下示例:

  • 工作表“A”列A:(A1)-Alfred,(A2)-Charles(因此带“Charles”的单元格值高亮显示,因为工作表“B”列A中缺少)

  • 工作表“B”A列:(A1)-阿尔弗雷德

我现在想做的是:

--工作表“A”A列:(A1)-阿尔弗雷德(A2)-查尔斯

--工作表“A”列F:(F1)-瑞典(F2)-法国(因此F列上带“France”的单元格值高亮显示,因为工作表“B”列H上带单元格值“Charles”的单元格值不同)

--工作表“B”A列:(A1)-阿尔弗雷德(A2)-查尔斯

--工作表“B”H列:(H1)-瑞典(H2)-西班牙

更多示意图:

工作表A:

     A     |   B   |   C   |   D   |   E   |   F
1  Alfred  |       |       |       |       | Sweden
2  Charles |       |       |       |       | France
工作表B:

     A     |   B   |   C   |   D   |   E   |   F  |  G  |  H  
1  Alfred  |       |       |       |       |      |     | Sweden
2  Charles |       |       |       |       |      |     | Spain

我不知道如何重新编写代码以这种方式工作。

实际上不需要使用字典。还有几个变量可以帮你解决这个问题

Sub missingvalue()

    Application.ScreenUpdating = False
    Dim desWS As Worksheet, srcWS As Worksheet
    Dim strfind As String
    Dim LastRow As Long, lngRow As Long, lngDest As Long
    Set srcWS = Sheets("Sheet B")
    Set desWS = Sheets("Sheet A")
    
    LastRow = srcWS.Range("A1").End(xlDown).Row
    For lngRow = 2 To LastRow
        strfind = srcWS.Cells(lngRow, 1)
        If Not desWS.Columns(1).Find(what:=strfind, lookat:=xlWhole) Is Nothing Then
            lngDest = desWS.Columns(1).Find(what:=strfind, lookat:=xlWhole).Row
        End If
        If desWS.Cells(lngDest, 6).Value <> srcWS.Cells(lngRow, 8).Value Then
            desWS.Cells(lngDest, 6).Interior.Color = vbRed
        End If
    Next lngRow
    
    Application.ScreenUpdating = True

End Sub
Sub-missingvalue()
Application.ScreenUpdating=False
Dim desWS作为工作表,srcWS作为工作表
Dim strfind As字符串
最后一行变暗一样长,成长一样长,最长一样长
设置srcWS=图纸(“图纸B”)
设置desWS=图纸(“图纸A”)
LastRow=srcWS.Range(“A1”).End(xlDown).Row
对于lngRow=2到最后一行
strfind=srcWS.Cells(lngRow,1)
如果不是desWS.Columns(1),那么Find(what:=strfind,lookat:=xlother)什么都不是
lngDest=desWS.Columns(1).Find(what:=strfind,lookat:=xlWhole).Row
如果结束
如果desWS.Cells(lngDest,6).Value srcWS.Cells(lngRow,8).Value然后
desWS.Cells(lngDest,6).Interior.Color=vbRed
如果结束
下一个成长
Application.ScreenUpdating=True
端接头

编程中的一条一般规则:永远不要重新发明轮子

您所描述的是一个单元格的高亮显示(或颜色修改),基于另一个单元格的值(或缺少值)。正是因为这个原因,才发明了

您可以基于公式设置条件格式(如果结果为
TRUE
则应用格式设置)。
VLookup()
Match()
函数的组合,可能与
If()
IfError()
组合,应该可以解决您的问题

编辑

经过一些尝试(我使用了您在问题的编辑版本中输入的值),我编写了以下公式(用于检查工作表A单元格F1的颜色):

此公式的作用如下:

  • 取值A1(“Alfred”)并在工作表B的表$A$1:$H$2中查找
  • 找到此值后,取eigth列的值(列“H”,其中有国家/地区参考)
  • 检查找到的值是否与工作表A上的国家/地区参考相符(本例中为“F”列,值为“F1”)
(备注:注意相对引用(A1,F1)和绝对引用($A$1,$H$2))


如果值对应,则此公式产生
TRUE
,如果值不对应(或未找到),则产生
FALSE
。这可以用作条件格式的基础。如果您在这方面有问题,我建议您在问题中添加“条件格式”作为标记,以便让这方面的专家看到您的问题。

您已经描述了您想要实现的目标以及使用的代码。但是没有告诉我们您的问题是什么:代码是否出错(如果是,在哪一行,针对哪些值),是否产生了错误的结果(如果是,您期望得到什么结果,以及您得到了什么)。一些示例数据会有所帮助(作为文本,我们可以复制粘贴。您也可以添加图像以显示颜色)。您有我正在编写的示例-Dominique F列上的值来自工作表“C”。公式是Iferror vlookup(我不知道如何使用您提到的公式)。Dominique,首先感谢您创建该结构。我正在尝试使用条件格式的公式,但仍然不起作用:(我在我的帖子上标记了条件格式。工作表A上的值从第6行开始,但我的东西与该公式无关。-James我尝试了你的代码,但不幸的是无法工作:(定义“不工作”。它是否会导致错误,或者它是否没有给出您要查找的结果?如果它没有生成您要查找的结果,请描述它们之间的区别。工作表A第6列上的值没有突出显示。我想在专用子表(工作表“A”下)中运行代码),在看到值之间的差异时自动显示
Sub missingvalue()

    Application.ScreenUpdating = False
    Dim desWS As Worksheet, srcWS As Worksheet
    Dim strfind As String
    Dim LastRow As Long, lngRow As Long, lngDest As Long
    Set srcWS = Sheets("Sheet B")
    Set desWS = Sheets("Sheet A")
    
    LastRow = srcWS.Range("A1").End(xlDown).Row
    For lngRow = 2 To LastRow
        strfind = srcWS.Cells(lngRow, 1)
        If Not desWS.Columns(1).Find(what:=strfind, lookat:=xlWhole) Is Nothing Then
            lngDest = desWS.Columns(1).Find(what:=strfind, lookat:=xlWhole).Row
        End If
        If desWS.Cells(lngDest, 6).Value <> srcWS.Cells(lngRow, 8).Value Then
            desWS.Cells(lngDest, 6).Interior.Color = vbRed
        End If
    Next lngRow
    
    Application.ScreenUpdating = True

End Sub
=VLookup(A1;B!$A$1:$H$2;8;0)=F1