Excel 如果值不同,则获取颜色
我需要您的帮助,我有下面的代码来比较不同工作表中的一列,如果工作表“B”列A(旧更新)中缺少某个值,则该值将在工作表“A”列A(值更新)中突出显示 现在: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”不应作为编码的一部分) 我很迷茫,你能帮我吗? (我想以私人助理的身份申请) 端接头 我无法添加想象不知道为
- 工作表“A”中的A列和工作表“B”中的A列具有相同的值(固定),我想比较工作表“A”中的F列和工作表“B”中的H列的值(这些值来自工作表“C”中的vlookup),如果有不同的值,则应在工作表“A”中突出显示单元格值
- 工作表“A”列A:(A1)-Alfred,(A2)-Charles(因此带“Charles”的单元格值高亮显示,因为工作表“B”列A中缺少)
- 工作表“B”A列:(A1)-阿尔弗雷德
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”)
如果值对应,则此公式产生
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