宏根据单元格内容有条理地格式化行

时间:2015-11-17 22:24:48

标签: excel vba conditional-formatting

我有一个每天早上导出的文件。我写了一个宏来删除不必要的列,并从文件中导出的电话号码中删除连字符。我的最后一步是突出显示电话号码与我的拒绝呼叫号码列表中的一个匹配的行。

底部应该突出显示工作表中的行,其中C(n)等于以下任何值(电话号码......)

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

End Sub 当我运行它时,行以指定的颜色突出显示,但所选的行不是包含任何这些数字的行。

对此有何帮助?代码不正确吗?

3 个答案:

答案 0 :(得分:0)

尝试将FormatConditions Formula1行更改为$ C1而不是$ C2,因为您将其应用于Cells。否则它会向下看一行而不是同一行:

"=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 :(得分:0)

或者您可以使用1列来存储所有数字 - 为每个组着色以便于识别。

将NO号码放在最上面。

1 cell = xxxx或任何用作可见分隔符的唯一文本。

及其下方以及您要检查的所有号码。

选择你的专栏> DATA TAB>删除重复

原始没有电话号码在识别时保持在最顶层,其余电话号码与它们进行比较并被删除。

然后,您可以选择列F5,并在需要合并时选择并删除所有空行。再次,您的无呼叫保持在最顶层,分隔符单元下方的任何剩余部分都可以清楚地呼叫。

如果您希望在此类列视图中轻松导航,请冻结大约10个顶行,并仅将其用于导航链接:

= HYPERLINK(CONCATENATE(“#”,CELL(“地址”,$ A $ 11)),“TO TOP”)

<强> = HYPERLINK(CONCATENATE( “#”,CELL( “地址”,INDEX($ A $ 1:$ B $ 1000,MATCH( “XXXX”,$ A $ 1:$ B $ 1000,0)0) )),“分离”)

其中xxxx是您正在寻找的分隔符 - 这个东西只是找到分隔符地址应该移动的位置,它将移动它应该更改列表。如果要偏移到+ - 位置,请更改+0。

答案 2 :(得分: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