【发布时间】:2016-10-02 18:19:19
【问题描述】:
我是 VBA 新手。我知道这不是做我正在做的事情的最佳方式,所以任何关于改进想法和一般方法解释的帮助将不胜感激!
所以我想要三种不同的格式。小于、大于和空白单元格格式。
几乎我的代码运行在一行中,检查每个值与该行末尾的值(目标)。如果大于或等于目标,则变为绿色。如果它较小,则为红色。如果目标单元格为空,则所有单元格均为空白(格式为白色背景,黑色文本)。如果单元格为空,则该单元格为空白(白色背景)。
我按顺序运行了所有 5 个宏,小、大、相等、空目标、空单元。这创建了一个格式正确且外观漂亮的 Excel。
当您更改目标编号时,该行中的单元格将分别更改。伟大的!但是,当您向以前的空目标添加新编号或删除目标编号时,您必须重新运行宏以获取格式。
旁注:对于我的代码,我记录了自己在做我想要的一行(除了空单元格),然后将它变成一个循环,沿着其他行向下。
知道如何消除重新运行的宏吗?理想情况下,此 Excel 文档将发送给对 VBA 一无所知的人。
Sub Greater()
Dim i As Integer
Dim myRange As String
Dim myComparison As String
For i = 4 To 97
myRange = "C" & i & ":BC" & i
myComparison = "=$BD$" & i
Range(myRange).Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
Formula1:=myComparison
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16752384
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13561798
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Next i
End Sub
x
Sub Lesser()
Dim i As Integer
Dim myRange As String
Dim myComparison As String
For i = 4 To 97
myRange = "C" & i & ":BC" & i
myComparison = "=$BD$" & i
Range(myRange).Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
Formula1:=myComparison
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Next i
End Sub
x
Sub Equal()
Dim i As Integer
Dim myRange As String
Dim myComparison As String
For i = 4 To 97
myRange = "C" & i & ":BC" & i
myComparison = "=$BD$" & i
Range(myRange).Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:=myComparison
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16752384
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13561798
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Next i
End Sub
x
Sub EmptyGoal()
Dim i As Integer
Dim myRange As String
Dim myComparison As String
For i = 4 To 97
myRange = "C" & i & ":BC" & i
Range(myRange).Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:=IsEmpty(Cells(i, 56))
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Next i
End Sub
x
Sub EmptyCell()
Range("C4:BC97").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=LEN(TRIM(C4))=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
【问题讨论】:
-
不看数据就很难准确理解你在做什么,但我认为你可以将格式应用到整个数据集一次,使用 4 或 5具有优先顺序的条件。无需循环行,甚至无需编写任何宏。您可以使用“公式”选项以包含可能更改的方式编写规则。
标签: excel conditional-formatting vba