Excel - 条件格式 - 插入行

时间:2012-09-18 16:13:27

标签: excel conditional-formatting

在“适用于”中使用偏移或间接似乎不起作用。是否有任何其他方法可以在插入行/

后停止条件格式化

我有一个范围的条件格式,例如$Ø$ 19:$Ø$ 105条件是“如果单元格值是> 10',它用红色格式化。

问题是 - 当我在excel中插入一行时,这个格式化范围分裂,我得到2个格式规则。对于例如范围为$ O $ 19,$ O $ 21:$ O $ 105&如果我在第20行插入新行,则分别为$ O $ 20。

通常,对于上述条件,如果将规则拆分为多个范围,则无关紧要。但对于像“突出显示前10名”这样的情况,会导致意外结果。

我没有太多运气就尝试了以下内容:

  1. 尝试使用间接 - 但excel似乎解决了公式并保存了格式规则,因此无法按预期使用插入
  2. 尝试使用偏移 - 再次excel解析与上述相同的范围。
  3. 任何人都知道如何编写不会因行插入而中断的条件格式?

      

    [编辑]我意识到插入行不会导致条件格式规则的拆分。我还复制一行并粘贴插入的行,这样做。如果我选择特殊粘贴并仅选择公式,它的工作正常。

16 个答案:

答案 0 :(得分:9)

我知道这是一个老话题,但这是另一种解决方案,它非常简单且效果很好。

只需根据需要插入新行或列。然后选择并复制具有正确条件格式的行/列。过去特殊到您刚刚创建的新行/列,并选择"所有合并条件格式"的选项。您的条件格式设置规则现在应该自动更新。

快乐的Excel-ing =)

答案 1 :(得分:7)

这是条件格式的一般问题。如果您插入行或移动东西,Excel假定您希望条件格式随单元格移动,并且您希望插入具有原始格式的单元格(或根本不插入)。

因此,它会尽力根据更改分割格式化范围。不幸的是“它最好”并不是很好。在幸运的情况下,您的格式规则会在没有您注意的情况下重复;在不幸的情况下,他们会破坏部分或全部应用范围。

如果使用ListObjects(a.k.a。“Excel表格”),这尤其成问题。插入一些行,重新排序,拖动一些值,下次查看条件格式列表时,您有几十到几百个重复规则。 (例如:http://blog.contextures.com/archives/2012/06/21/excel-2010-conditional-formatting-nightmare/

根据我的经验,解决混乱的最快方法是删除所有规则并重新创建(或不重建)。

一些旁注:

  • 适用范围始终是绝对的。没有办法解决这个问题。
  • 更糟糕的是,条件格式被视为易失性公式,这意味着它们会在很多场合重新计算(打开另一个文件,滚动等)。如果您没有注意到拆分,他们可能会在一段时间后显着减慢整个应用程序。
  • 如果你选择VBA,你可能想要使用Worksheet_Calculate事件,至少如果你的公式引用其他工作表(注意名字!)

答案 2 :(得分:3)

我在尝试创建报告时遇到了这个问题 - 一旦他们完成了他们不需要改变,但是在我制作报告时,我不断添加新行和每个新行弄乱了条件格式。

这绝不是一个好的解决方案,但它是我能找到的最好的,而不是诉诸于VBA - 这是:

a)使条件格式规则一次适用于整列或更多

例如,

不是在C2和C17上设置条件格式,而是添加一个额外的列,然后写下这个"这个"在第2行和第17行中,然后将整个列C的格式设置为"如果另一列显示'这个'然后应用这种格式"

b)将适用范围更改为$ C $ 1:$ C $ 2.

c)进行更改并插入行和内容

d)然后返回并将“适用于”更改为$ C:$ C

这样,当你改变东西并添加东西时,条件格式不存在,但是之后你就把它全部放回去了。

如果以后需要添加更多行,首先将其从$ C:$ C更改为$ C $ 1:$ C $ 2,然后进行更改,然后将其重新设置为$ C :$ C。这样你就不必从头开始完全重写所有的格式规则,如果你做了我之前完成的事情,只是将它们全部删除,诅咒,然后重新开始;)

显然,如果您计划在第1行或第2行的顶部插入行,那么这不会起作用,但您可以随时将其设置为您知道自己赢得的其他行。改变。

答案 3 :(得分:2)

虽然这是一个非常古老的主题,但我的Excel工作表在插入新行时也会遇到重复条件格式的问题。

我能够解决它。让我与其他人分享,也可能有所帮助。

在我的情况下,我的所有条件格式规则都应用于整个表。我意识到插入新行时只复制某些规则。这些规则是基于公式的比较不同行中的值。

就我而言,我希望在两个相邻行的值不同时渲染水平边框,例如:

=$A2 <> $A1

如果我使用OFFSET来引用前一行,则一切正确,没有重复的条件格式规则。

=$A2<>OFFSET($A2; -1; 0)

我实际上将这些条件格式化公式放入隐藏列中,但结果应该相同。

答案 4 :(得分:1)

我意识到插入行不会导致条件格式规则的拆分。我还复制一行并粘贴插入的行,这样做。如果我选择特殊粘贴并仅选择公式,它的工作正常。

但是,我想知道是否需要在“适用于”条件格式的“适用于”字段中使用“间接”或“偏移”。如果是这样,那将是一个问题。

答案 5 :(得分:1)

我意识到这是一个老帖子,但我遇到了同样的问题,并且已经弄清楚如何不获得拆分条件格式规则。

在我的Excel 2010电子表格中,我在B列中输入日期。有时我会指责日期条目,这就是我想要有条件地格式化它们的原因。最初,我选择了一个范围(B2:B1960),因此我在条件格式规则中的公式将是“= B2:B1960&gt; TODAY()”。

嗯,在我在现有行之间插入新行之前,这很好用。规则将像OP描述的那样分裂。我碰巧看了几个不同的网站,发现了一个微软Office网站,它指出了我的答案。它提到要突出显示要格式化的范围,但将公式更改为“= B2&gt; TODAY()”。

由于更改了公式,我现在可以在现有行之间插入新行,而不像以前那样获取拆分规则。这是该网页的链接。 http://office.microsoft.com/en-us/excel-help/use-a-formula-to-apply-conditional-formatting-HA102809768.aspx

答案 6 :(得分:1)

对我来说有用的是,当你插入一行时,不要从另一行复制格式。只有copy-special粘贴公式。然后条件格式不会被拆分。

答案 7 :(得分:1)

我对此确切问题的解决方案是从源副本中清除格式。 步骤进行:

  1. 将来源复制到剪贴板
  2. 打开新的Excel文档
  3. 选择性粘贴,选择公式(复制值和公式,省略格式)
  4. 将此复制到剪贴板
  5. 现在您可以在使用之前粘贴回源,或者使用条件格式将空行插入到工作表中(注意只插入行不会更改条件格式规则的范围)并将剪贴板内容粘贴到新行。
  6. 这对我来说使用MS Excel 2016

答案 8 :(得分:1)

我同意以前发布的内容;复制和粘贴值(或粘贴公式)将完全可以避免不拆分条件格式。

我对此有点懒。而且我不希望那些使用我的电子表格的人必须这样做。我也不相信他们会记得复制和粘贴值。 :(

我不知道此解决方案是否可以满足您的需要,但是我不得不删除所有条件格式,并在每次打开工作簿时重新应用正确的条件格式。

因为此宏在每次打开工作簿时都运行,所以用户不需要更改复制和粘贴的方式。他们不需要知道宏就在那里。他们不需要手动运行宏。它是自动的。我觉得这会带来更好的用户体验。

请记住,此代码需要复制并粘贴到“此工作簿”模块中;不是常规模块。

Private Sub Workbook_Open()
'This will delete all conditional formatting and reapply the conditional formatting properly.
'After copying and pasting the conditional formatting get split into two or more conditional formattings. After a few
'weeks there are so many conditional formattings that Excel crashes and has to recover.

Dim ws As Worksheet, starting_ws As Worksheet


Set starting_ws = ActiveSheet   'remember which worksheet is active in the beginning
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "InvErr" Then
        ws.Activate
        Cells.FormatConditions.Delete
        ''Every Other Row Tan
        Range("A4:M203").FormatConditions.Add Type:=xlExpression, Formula1:="=ISODD(ROW(A4))"
        Range("A4:M203").FormatConditions(Range("A4:M203").FormatConditions.Count).SetFirstPriority
        Range("A4:M203").FormatConditions(1).Interior.PatternColorIndex = xlAutomatic
        Range("A4:M203").FormatConditions(1).Interior.ThemeColor = xlThemeColorDark2
        Range("A4:M203").FormatConditions(1).Interior.TintAndShade = 0
        Range("A4:M203").FormatConditions(1).StopIfTrue = False

        ''Highlight Duplicates Red
        Columns("B").FormatConditions.AddUniqueValues
        Columns("B").FormatConditions(Columns("B").FormatConditions.Count).SetFirstPriority
        Columns("B").FormatConditions(1).DupeUnique = xlDuplicate
        Columns("B").FormatConditions(1).Font.Color = -16383844
        Columns("B").FormatConditions(1).Font.TintAndShade = 0
        Columns("B").FormatConditions(1).Interior.PatternColorIndex = xlAutomatic
        Columns("B").FormatConditions(1).Interior.Color = 13551615
        Columns("B").FormatConditions(1).Interior.TintAndShade = 0
        Columns("B").FormatConditions(1).StopIfTrue = False
    End If
Next

starting_ws.Activate   'activate the worksheet that was originally active
Application.ScreenUpdating = True

End Sub

答案 9 :(得分:0)

这是一个类似的主题,可能会让你走上正轨:

How to use the Worksheet_Change event for Conditional Formatting?

它概述了R1C1样式格式的解决方法,这些格式可能不会受到插入(未经测试)以及我在评论中提到的VBA方法的影响。

答案 10 :(得分:0)

我找到了一个简单的过程,似乎可以一致地插入新的行或列,并保留条件格式设置规则的连续性(至少在Office 2010中),如下所示:

  1. 对包含要保留的条件格式的行或列的上方,下方或左侧或右侧的所需数量的新行或列进行简单的“插入”。
  2. 注意a)条件格式自动应用于插入的行或列         没有你必须做进一步的事情。格式应该是继承的         来自邻近的行或列。      b)任何边框格式也应该被复制到新插入的单元格中。

    1. 选择与新插入的行相邻的行,列或范围(通过单击它),其中包含要复制的条件格式(以及公式和数据,如果适用)。

    2. 将鼠标悬停在所选范围的左下角或右下角,直到您看到加号“+”符号出现(请勿将其与行重新调整大小的小工具混淆,因为它们看起来相似)。

    3. 左键单击并按住“+”,然后拖动要格式化的所需行,列或范围,然后释放。

    4. 注意:我创建仅引用一个单元格的条件格式规则: 示例)在标题为“格式化此公式为真的值:”的字段中,创建一个规则,例如... = AND($ B8 =“”,$ C8 =“”,$ D8 =“”,$ K8&lt;&gt; ;“”),此规则适用于说范围... = $ B $ 8:$ D $ 121,$ J $ 8:$ M $ 121.

答案 11 :(得分:0)

你需要做的是1)插入一个新行2)复制你想要克隆的行3)粘贴特殊的“合并条件格式”

如果您希望其他人共享您创建的工作簿,则不直观且需要大量的用户培训

答案 12 :(得分:0)

2013年,一旦发现您的格式规则已被拆分/重复,请为每种格式定义一个新的命名范围。然后将apply设置为= [Named Range]。 Excel将使用实际范围替换指定范围。然后删除重复的格式。

答案 13 :(得分:0)

我正在构建一个解决方案,其他具有混合Excel技能水平的人将会发挥作用,所以我需要更容易和更一致的东西,而不是让他们记住以某种方式复制和粘贴。

在Excel 2016中,您可以插入所选范围中的表,然后使用结构化引用(例如:tblTOP [Type])来引用名为tblTOP的表的Type列中的数据。

然后我在微软的网站上找到了这个答案,它显示了在CF的公式部分中引用表格的有效方法: conditional formatting structured references

所以,有了这个......

这就是我正在使用的:

tblTop Columns

我设置了条件格式,这样当我在A到E之间的任何位置更改Type值时,它会将该行更改为相应的颜色。 (显示示例:B将行变为绿色)

这是通过使用公式 = INDIRECT(“tblTOP [Type]”)=“B”

完成的

当我去添加一行时,我得到了应用于第二行的相同格式:(。

Broke CF between two rows

有效的CF公式

长话短说,以下公式是我将CF规则应用于该特定行并且不影响任何添加或删除的行的公式:

= INDIRECT( “tblTOP [@Type]”)= “B”

在结构化引用前面添加“@”可以使事情只发生在给定的行上。好的。

所以现在我可以通过选项卡或使用上下文菜单添加新行,然后等待类型选择以确定该行的颜色。

New Row added clean

New Row working as expected

我没有用粘贴单元格测试它,因为此表的目的是让最终用户输入数据并根据需要添加/删除行,所以我不能说这是否适用于粘贴行。 / p>

希望这可以帮助某人在表格中使用条件格式。

答案 14 :(得分:0)

这对我来说足够好...

Sub ConditionalFormattingRefresh()
'
' ConditionalFormattingRefresh Macro
'

'Generales
Dim sh As Worksheet
Dim tbl As ListObject
Dim selectedCell As Range
Set sh = ActiveSheet
Set tbl = Range("Plan").ListObject
Set selectedCell = ActiveCell

'Rango a copiar
Dim copyRow As Range
Set copyRow = tbl.ListRows(1).Range

'Rango a restaurar
Dim startCell As Range
Dim finalCell As Range
Dim refreshRange As Range
Set startCell = tbl.DataBodyRange.Cells(2, 1)
Set finalCell = tbl.DataBodyRange.Cells(tbl.ListRows.Count, tbl.ListColumns.Count)
Set refreshRange = Range(startCell.Address, finalCell)

'Ocultar procesamiento
Application.ScreenUpdating = False
Application.EnableEvents = False

'Borrar formato corrupto
refreshRange.FormatConditions.Delete

'Copiar
copyRow.Copy
'Pegar formato
tbl.DataBodyRange.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

'Retornar a la normalidad
selectedCell.Select
    Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

答案 15 :(得分:-1)

我通过以下步骤将其用于Excel Mac 2011

  • 插入新行
  • 复制上面的那个(已应用条件格式)
  • 突出显示新行和 PASTE SPECIAL - &gt;合并条件格式

CF规则保持未拆分并更新为包含额外的行。