【问题标题】:Macro to Conditionally Format rows based on cell contents基于单元格内容有条件地格式化行的宏
【发布时间】:2015-11-21 03:46:18
【问题描述】:

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

底部应突出显示工作表中 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

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

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

【问题讨论】:

  • 你能发布所有关于格式的代码吗?看来你错过了一个“结束”。多看看相关代码就好了。
  • @MacroMarc,请参阅更新后的原始帖子。谢谢!

标签: excel vba conditional-formatting


【解决方案1】:

有点困惑。我看不出上面的代码实际上是如何导致以任何方式格式化几行的。 无论如何,这是我的建议:

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

【讨论】:

  • 这太完美了!谢谢你的帮助,@macromarc。前几行只是删除额外的列......关于在某些条件下格式化单元格的部分是不起作用的部分。现在是,谢谢你!
  • 没问题!很高兴它有帮助
【解决方案2】:

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

把 NO 电话号码放在最上面。

1 个单元格 =xxxx 或任何独特的文本作为可见分隔符。

在它们下方以及您要检查是否拨打的所有号码。

选择您的列 > 数据选项卡 > 删除重复项

原始的无索书号在被识别时保留在最前面,其余的与它们进行比较并被删除。

然后您可以选择 F5 列,并在需要合并时选择并删除所有空行。再一次,您的 No Calls 仍然位于顶部,分隔单元格下方的任何内容都可以调用。

如果您想在此类列视图中轻松导航,请冻结大约 10 行顶部行并将它们仅用于导航链接:

比如 =HYPERLINK(CONCATENATE("#",CELL("Address",$A$11)),"TO TOP")

=HYPERLINK(CONCATENATE("#",CELL("地址",INDEX($A$1:$B$1000,MATCH("xxxx",$A$1:$B$1000,0)+0) )),"TO SEPARATOR")

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

【讨论】:

    【解决方案3】:

    尝试将 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})"
    

    【讨论】:

    • 列表末尾缺少括号。这不是数组公式吗?如果是,条件格式可以处理吗?
    • 不用考虑数组公式。在常规单元格上对其进行了测试,并且无需数组公式即可完美运行。干杯。
    • 感谢您找到丢失的右括号,它已被添加。很高兴听到它对你有用
    • @tigeravatar 当我将行更改为该行时,我收到以下消息:“运行时错误'5':无效的过程调用或参数。调试选项突出显示行'Selection.FormatConditions .Add Type:=xlExpression, Formula1:= _ "=OR($C1={2025211493,2063919340,2096568626,2184943359,2535203630, ...等
    猜你喜欢
    • 2015-04-03
    • 2012-11-10
    • 2010-11-29
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2014-12-27
    • 2021-07-26
    • 2023-03-26
    相关资源
    最近更新 更多