根据单元格内容有条件地格式化行的宏
Macro to Conditionally Format rows based on cell contents
我有一个每天早上导出的文件。我写了一个宏来删除不必要的列,并从文件中导出的 phone 数字中删除连字符。我的最后一步是突出显示 phone 号码与我的“请勿来电”号码列表中的号码匹配的行。
底部应突出显示 sheet 中的行,其中 C(n) 等于以下任何值(phone 数字...)
Sub Annihilation()
'
' Annihilation Macro
' Highlight bad numbers, formats worksheet.
'
'
Range("B:B,D:D,E:E,G:G").Select
Range("G1").Activate
Selection.Delete Shift:=xlToLeft
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Replace What:="-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").EntireColumn.AutoFit
Range("C2").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=OR($C2= 2025211493, $C2=2063919340, $C2=2096568626, $C2=2184943359, $C2=2535203630, $C2=2533306498, $C2=4055763188, $C2=4057014173, $C2=4235861076, $C2=5019450123, $C2=5036781060, $C2=5036071088, $C2=5094532476, $C2=5138697827, $C2=5175070612, $C2=5409662174, $C2=5592714006, $C2=5613334173, $C2=5626224977, $C2=6152069720, $C2=6194611018, $C2=6206408997, $C2=7086919068, $C2=7028252742, $C2=7173546777, $C2=7609497400, $C2=7634446852, $C2=7702050218, $C2=8002263696, $C2=8017841482, $C2=8015756500, $C2=8063641273, $C2=8179243829, $C2=8436654968, $C2=8476561100, $C2=8608150728, $C2=8602171111, $C2=8669710959, $C2=8883420784, $C2=9197901354, $C2=9199349948, $C2=9519245300, $C2=9703020157)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399945066682943
End With
Selection.FormatConditions(1).StopIfTrue = False
结束子
当我 运行 这样做时,行以指定的颜色突出显示,但所选行不是包含任何这些数字的行。
对此有任何帮助吗?代码不正确?
尝试将 FormatConditions Formula1 行更改为 $C1 而不是 $C2,因为您正在将其应用于单元格。否则它会向下查看一行而不是同一行:
"=OR($C1={2025211493,2063919340,2096568626,2184943359,2535203630,2533306498,4055763188,4057014173,4235861076,5019450123,5036781060,5036071088,5094532476,5138697827,5175070612,5409662174,5592714006,5613334173,5626224977,6152069720,6194611018,6206408997,7086919068,7028252742,7173546777,7609497400,7634446852,7702050218,8002263696,8017841482, 8015756500,8063641273,8179243829,8436654968,8476561100,8608150728,8602171111,8669710959,8883420784,9197901354,9199349948,9519245300,9703020157})"
或者您可以使用 1 列来存储所有数字 - 为每组着色以便于识别。
将 NO 电话号码放在最上面。
1 个单元格 =xxxx 或任何用作可见分隔符的唯一文本。
及其下方以及您要检查是否拨打的所有号码。
Select 您的专栏 > 数据选项卡 > 删除重复项
原始的无呼叫号码在被识别时保留在最前面,其余的与它们进行比较并被删除。
然后您可以 select 列 F5 和 select 并在需要合并时删除所有空行。再次,您的“无呼叫”保留在顶部,分隔单元格下方的任何内容都可以清楚地呼叫。
如果您想在这样的列视图中简化导航,请冻结大约 10 行的顶部行并将它们仅用于导航链接:
比如
=HYPERLINK(CONCATENATE("#",CELL("Address",$A$11)),"TO TOP")
=HYPERLINK(CONCATENATE("#",CELL("Address",INDEX($A$1:$B$1000,MATCH("xxxx",$A$1:$ B$1000,0)+0))),"TO SEPARATOR")
其中 xxxx 是您正在寻找的分隔符 - 这个东西只是找到分隔符地址应该移动到哪里,它会移动应该改变列表。如果要偏移到 +- 位置,请更改 +0。
有点困惑。我根本看不出上面的代码实际上是如何导致以任何方式格式化多行的。
不管怎样,这是我的建议:
Dim r As Range
Set r = Range("A2:G6") 'figure out how to set this to your appropriate range
'It should be a range starting at the first cell in the data range, and end in the last cell
r.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=OR($C2= 2025211493, $C2=2063919340, $C2=2096568626, $C2=2184943359, $C2=2535203630, $C2=2533306498, $C2=4055763188, $C2=4057014173, $C2=4235861076, $C2=5019450123, $C2=5036781060, $C2=5036071088, $C2=5094532476, $C2=5138697827, $C2=5175070612, $C2=5409662174, $C2=5592714006, $C2=5613334173, $C2=5626224977, $C2=6152069720, $C2=6194611018, $C2=6206408997, $C2=7086919068, $C2=7028252742, $C2=7173546777, $C2=7609497400, $C2=7634446852, $C2=7702050218, $C2=8002263696, $C2=8017841482, $C2=8015756500, $C2=8063641273, $C2=8179243829, $C2=8436654968, $C2=8476561100, $C2=8608150728, $C2=8602171111, $C2=8669710959, $C2=8883420784, $C2=9197901354, $C2=9199349948, $C2=9519245300, $C2=9703020157)"
r.FormatConditions(r.FormatConditions.Count).SetFirstPriority
With r.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399945066682943
End With
r.FormatConditions(1).StopIfTrue = False
我有一个每天早上导出的文件。我写了一个宏来删除不必要的列,并从文件中导出的 phone 数字中删除连字符。我的最后一步是突出显示 phone 号码与我的“请勿来电”号码列表中的号码匹配的行。
底部应突出显示 sheet 中的行,其中 C(n) 等于以下任何值(phone 数字...)
Sub Annihilation()
'
' Annihilation Macro
' Highlight bad numbers, formats worksheet.
'
'
Range("B:B,D:D,E:E,G:G").Select
Range("G1").Activate
Selection.Delete Shift:=xlToLeft
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Replace What:="-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").EntireColumn.AutoFit
Range("C2").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=OR($C2= 2025211493, $C2=2063919340, $C2=2096568626, $C2=2184943359, $C2=2535203630, $C2=2533306498, $C2=4055763188, $C2=4057014173, $C2=4235861076, $C2=5019450123, $C2=5036781060, $C2=5036071088, $C2=5094532476, $C2=5138697827, $C2=5175070612, $C2=5409662174, $C2=5592714006, $C2=5613334173, $C2=5626224977, $C2=6152069720, $C2=6194611018, $C2=6206408997, $C2=7086919068, $C2=7028252742, $C2=7173546777, $C2=7609497400, $C2=7634446852, $C2=7702050218, $C2=8002263696, $C2=8017841482, $C2=8015756500, $C2=8063641273, $C2=8179243829, $C2=8436654968, $C2=8476561100, $C2=8608150728, $C2=8602171111, $C2=8669710959, $C2=8883420784, $C2=9197901354, $C2=9199349948, $C2=9519245300, $C2=9703020157)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399945066682943
End With
Selection.FormatConditions(1).StopIfTrue = False
结束子 当我 运行 这样做时,行以指定的颜色突出显示,但所选行不是包含任何这些数字的行。
对此有任何帮助吗?代码不正确?
尝试将 FormatConditions Formula1 行更改为 $C1 而不是 $C2,因为您正在将其应用于单元格。否则它会向下查看一行而不是同一行:
"=OR($C1={2025211493,2063919340,2096568626,2184943359,2535203630,2533306498,4055763188,4057014173,4235861076,5019450123,5036781060,5036071088,5094532476,5138697827,5175070612,5409662174,5592714006,5613334173,5626224977,6152069720,6194611018,6206408997,7086919068,7028252742,7173546777,7609497400,7634446852,7702050218,8002263696,8017841482, 8015756500,8063641273,8179243829,8436654968,8476561100,8608150728,8602171111,8669710959,8883420784,9197901354,9199349948,9519245300,9703020157})"
或者您可以使用 1 列来存储所有数字 - 为每组着色以便于识别。
将 NO 电话号码放在最上面。
1 个单元格 =xxxx 或任何用作可见分隔符的唯一文本。
及其下方以及您要检查是否拨打的所有号码。
Select 您的专栏 > 数据选项卡 > 删除重复项
原始的无呼叫号码在被识别时保留在最前面,其余的与它们进行比较并被删除。
然后您可以 select 列 F5 和 select 并在需要合并时删除所有空行。再次,您的“无呼叫”保留在顶部,分隔单元格下方的任何内容都可以清楚地呼叫。
如果您想在这样的列视图中简化导航,请冻结大约 10 行的顶部行并将它们仅用于导航链接:
比如 =HYPERLINK(CONCATENATE("#",CELL("Address",$A$11)),"TO TOP")
=HYPERLINK(CONCATENATE("#",CELL("Address",INDEX($A$1:$B$1000,MATCH("xxxx",$A$1:$ B$1000,0)+0))),"TO SEPARATOR")
其中 xxxx 是您正在寻找的分隔符 - 这个东西只是找到分隔符地址应该移动到哪里,它会移动应该改变列表。如果要偏移到 +- 位置,请更改 +0。
有点困惑。我根本看不出上面的代码实际上是如何导致以任何方式格式化多行的。 不管怎样,这是我的建议:
Dim r As Range
Set r = Range("A2:G6") 'figure out how to set this to your appropriate range
'It should be a range starting at the first cell in the data range, and end in the last cell
r.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=OR($C2= 2025211493, $C2=2063919340, $C2=2096568626, $C2=2184943359, $C2=2535203630, $C2=2533306498, $C2=4055763188, $C2=4057014173, $C2=4235861076, $C2=5019450123, $C2=5036781060, $C2=5036071088, $C2=5094532476, $C2=5138697827, $C2=5175070612, $C2=5409662174, $C2=5592714006, $C2=5613334173, $C2=5626224977, $C2=6152069720, $C2=6194611018, $C2=6206408997, $C2=7086919068, $C2=7028252742, $C2=7173546777, $C2=7609497400, $C2=7634446852, $C2=7702050218, $C2=8002263696, $C2=8017841482, $C2=8015756500, $C2=8063641273, $C2=8179243829, $C2=8436654968, $C2=8476561100, $C2=8608150728, $C2=8602171111, $C2=8669710959, $C2=8883420784, $C2=9197901354, $C2=9199349948, $C2=9519245300, $C2=9703020157)"
r.FormatConditions(r.FormatConditions.Count).SetFirstPriority
With r.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399945066682943
End With
r.FormatConditions(1).StopIfTrue = False