如果值不同,则获取颜色



我需要你的帮助,下面的代码可以比较不同工作表中的一列,如果工作表中缺少一些值"B";列A(旧更新(值将在工作表"上突出显示;A";A列(更新值(

现在:

  • 工作表中的列A";A";以及工作表";B";具有相同的值(固定的(,并且我想比较来自列F工作表"C"的值(这些值来自工作表"C"的vlookup(;A";到工作表的H列";B";,如果有不同的值,则单元格值应在F列工作表"上突出显示;A">

(工作表"C"不应是编码的一部分(

我很不懂编码,你能帮我吗?(我想作为私人子公司申请(

Sub missingvalue ()
Application.ScreenUpdating = False
Dim desWS As Worksheet, srcWS As Worksheet, arr1 As Variant, arr2 As Variant, Val As String, dic As Object
Set srcWS = Sheets("B")
Set desWS = Sheets("A")
Dim LastRow As Long
arr1 = srcWS.Range("A2", srcWS.Range("A" & Rows.Count).End(xlUp)).Value
arr2 = desWS.Range("A2", desWS.Range("A" & Rows.Count).End(xlUp)).Value
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr1, 1)
Val = arr1(i, 1)
If Not dic.Exists(Val) Then
dic.Add Key:=Val, Item:=i + 1
End If
Next i
For i = 1 To UBound(arr2, 1)
Val = arr2(i, 1)
If Not dic.Exists(Val) Then
desWS.Range("A" & i + 1).Interior.Color = RGB(186, 208, 80)
End If
Next i
Application.ScreenUpdating = True

结束子

我无法添加想象不知道为什么,我会尝试通过文字:

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

  • 工作表"A";A列:(A1(-Alfred,(A2(-Charles(因此带有"Charles"的单元格值被突出显示,因为在工作表"B"A列中缺失(

  • 工作表";B";A栏:(A1(-Alfred

我现在想做的是:

--工作表";A";A栏:(A1(-阿尔弗雷德(A2(-查尔斯

--工作表";A";列F:(F1(-瑞典(F2(-法国(因此,列F上带有"法国"的单元格值被突出显示

--工作表";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

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

您所描述的是基于另一个单元格的值(或缺少值(来突出显示(或修改颜色(一个单元格。正是出于这个原因,条件格式被发明了。

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

编辑

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

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

这个公式的作用如下:

  • 取值A1("Alfred"(并在工作表B上的表$A$1:$H$2中查找
  • 找到该值后,取第eig列的值("H"列,其中有国家/地区参考(
  • 检查所找到的值是否与工作表A上的国家参考相对应(在这种情况下,列"F",值"F1"(

(备注:注意相对参考(A1,F1(和绝对参考($A$1,$H$2(

如果值对应,则此公式生成TRUE,如果不对应(或未找到(,则生成FALSE。这可以作为条件格式的基础。如果你对此有问题,我建议你添加";条件格式化";作为你问题的标签,以便让这方面的专家看到你的问题。

最新更新