1、在Excel表格的菜单栏上面点击【开发工具】、【Visual Basic】打开VBA编辑器,或者使用【Alt+F11】组合键打开VBA编辑器。
2、在左侧的“工程资源管理器”下方双击“Sheet1(Sheet1)”,在“Sheet1”的代码窗口里面输入以下VBA程序代码,再按【F5】键运行程序。Sub ValueColorChange()Dim h, c, i1, i2, i3, i4, i5, i6, i7, i8, i9, My1Array(100, 100), My2Array(100, 100), My3Array(100, 100)On Error Resume Next '忽略运行过程中可能出现的错误Set mysheet1 = ThisWorkbook.Worksheets("Sheet1") '定义工作表For h = 2 To 1000 '从第2行到第1000行For c = 1 To 2 '从第1列到第2列 If mysheet1.Cells(h, c) <> "" Then '如果单元格不是空白,则 i1 = 0 'i1初始化为0 i2 = 0 i3 = Len(mysheet1.Cells(h, c)) '获取单元格字符长度 i4 = 0 Do i1 = i1 + 1 '每执行一次,递增1;也是累计单元格里面含有多少个数值 i2 = i4 '把上一次逗号的位置赋给i2 i4 = InStr(i2 + 1, mysheet1.Cells(h, c), ",") '获取单元格里面逗号的位置 If i4 = 0 Then '如果找不到逗号(,),则 i5 = i3 - i2 '计算字符个数 Else i5 = i4 - i2 - 1 End If My1Array(i1, c) = Mid(mysheet1.Cells(h, c), i2 + 1, i5) '截取单元格里面的数值 My2Array(i1, c) = i2 + 1 '把数值(字符)的起始位置赋给数组 My3Array(i1, c) = i5 '把数值个数赋给数组 If i1 >= 20000 Or i4 = 0 Then '如果循环次数超过2万或已经找不到逗号(,),则退出循环 Exit Do End If Loop i7 = i6 '把第一次单元格里面数值个数赋给i7 i6 = i1 '把第二次单元格里面数值个数赋给i6 End IfNextFor i8 = 1 To i7 '第一次单元格含有的数值个数逐一循环 For i9 = 1 To i6 '第二次单元格含有的数值个数逐一循环 If My1Array(i8, 1) = My1Array(i9, 2) Then '如果数组里面的数值相同,则相应的数值填充成红色 mysheet1.Cells(h, 1).Characters(My2Array(i8, 1), My3Array(i8, 1)).Font.Color = RGB(255, 0, 0) mysheet1.Cells(h, 2).Characters(My2Array(i9, 2), My3Array(i9, 2)).Font.Color = RGB(255, 0, 0) End If NextNextFor i8 = 1 To i7 '逐一清空数组里面的值 My1Array(i8, 1) = ""NextFor i9 = 1 To i6 My1Array(i9, 1) = ""NextNextEnd Sub
3、如果左侧没有“工程资源管理器”,在菜单栏上面的【视图】下拉菜单里面选择“工程资源管理器”即可,或者使用【Ctrl+R】快捷键调出。(如果已有“工程资源管理器”,则可以忽略此步)
4、回到工作表界面,将会看到程序的执行结果。
5、VBA程序代码解读:(1)Len函数是获取单元格里面字符串的长度,要获取最后一个数值的长度,只能使用单元格字符串长度减去最后一个逗号所在的位置。(2)InStr函数是查找字符所在的位置,即:InStr(起始位置,要查找的字符串,查找的字符),如果找不着,则为0,之后就可以退出Do循环了。(3)Mid函数是截取字符串的函数,主要是把截取的字符串转存到到二维数组My1Array(i1, c)里面。(4)My1Array(100, 100)是二维数组,刚使用也有点难,不过可以节约一些函数定义。在使用过程中,可以按下【F8】键逐行运行,之后在“本地窗口”里面查看二维数组对应的结果,以便加深理解。(5)每执行完一行,应当对数组里面的值清空,以免后续的计算出错。