【发布时间】:2020-09-29 01:26:49
【问题描述】:
我想用颜色突出显示彼此不同的单元格;在这种情况下 colA 和 colB。这个函数可以满足我的需要,但看起来重复、丑陋和低效。我不精通VBA编码;有没有更优雅的方式来编写这个函数?
编辑 我试图让这个功能做的是: 1. 突出 ColA 中与 ColB 不同或不同的单元格 2. 高亮 ColB 中与 ColA 不同或不同的单元格
Sub compare_cols()
Dim myRng As Range
Dim lastCell As Long
'Get the last row
Dim lastRow As Integer
lastRow = ActiveSheet.UsedRange.Rows.Count
'Debug.Print "Last Row is " & lastRow
Dim c As Range
Dim d As Range
Application.ScreenUpdating = False
For Each c In Worksheets("Sheet1").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("Sheet1").Range("B2:B" & lastRow).Cells
c.Interior.Color = vbRed
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
Exit For
End If
Next
Next
For Each c In Worksheets("Sheet1").Range("B2:B" & lastRow).Cells
For Each d In Worksheets("Sheet1").Range("A2:A" & lastRow).Cells
c.Interior.Color = vbRed
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
Exit For
End If
Next
Next
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
完全摆脱 VBA 并使用 XL 强大的
Conditional Formatting功能怎么样?另外,也许这更适合Code Review -
@ScottHoltzman 该功能是否适用于所有版本?
-
@njk -> 好问题。确实如此,但 07/10 中的功能比 03 更强大。不过,我不确定 07/10 中的差异。
-
@ScottHoltzman 我不知道代码审查网站。以后我会在那里发帖,见谅。另外,我刚刚注意到我的代码中有一个错误,它跳过了单元格。我怀疑它击中了 Exit For 并绕过了两个 For 循环,而不仅仅是内部循环。
-
是的,您的
Exit For将退出原来的For。但是,目前还不清楚您要突出显示的不同之处,因为您循环遍历 B 列中的每个单元格以获取 A 列中的每个单元格,然后对相反方向执行相同操作,因此您的颜色可能会在过程,取决于你的价值观。你能用更多的非代码描述来编辑你的帖子吗?