26

在“应用于”中使用偏移或间接似乎不起作用。插入行/秒后是否有其他方法可以阻止条件格式中断

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

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

通常对于上述条件,如果规则被分成多个范围,则可能无关紧要。但是对于像“突出显示前 10 名”这样的条件,它会导致不希望的结果。

我尝试了以下方法,但运气不佳:

  1. 尝试使用间接 - 但 excel 似乎可以解决公式并保存格式规则,因此不能按预期使用插入
  2. 尝试使用偏移量 - 这里再次 excel 解决了与上述相同的范围。

任何人都知道如何编写不与行插入中断的条件格式?

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

4

17 回答 17

13

我知道这是一个旧线程,但这是另一个超级简单且效果很好的解决方案。

只需根据需要插入新的行或列。然后选择并复制具有正确条件格式的行/列。Past Special 进入您刚刚创建的新行/列,然后选择“所有合并条件格式”选项。您的条件格式规则现在应该会自动更新。

快乐 Excel ing =)

于 2014-05-15T17:17:15.907 回答
8

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

所以它尽量根据变化来分割格式化的范围。不幸的是,“最好的”不是很好。在幸运的情况下,您的格式规则会在您不注意的情况下重复;在不幸的情况下,它们会在部分或全部应用范围内中断。

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

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

一些旁注:

  • 适用范围始终是绝对的。没有办法解决这个问题。
  • 更糟糕的是,条件格式被视为易失公式,这意味着它们会在很多情况下重新计算(打开另一个文件、滚动等)。如果您没有注意到拆分,它们可能会在一段时间后显着减慢整个应用程序。
  • 如果您使用 VBA,您可能想要使用 Worksheet_Calculate 事件,至少在您的公式引用其他工作表时(请注意名称!)
于 2013-05-30T08:53:14.680 回答
3

I was having this problem while trying to create reports - once they're finished they don't need to change, but while I'm making them, I keep adding new lines and each new line mucks up the conditional formatting.

This is by no means a good solution, but it was the best I could find without resorting to VBA - which was to:

a) Make the conditional formatting rules apply to a whole column or more at a time

for example instead of setting conditional formatting on C2 and C17, put an extra column, and write "this one" in rows 2 and 17, and then set the formatting for the whole of column C to be "if the other column says 'this one' then apply this format"

b) Change the Applies To to be just $C$1:$C$2.

c) Make changes and insert rows and stuff

d) Then go back and change the Applies To to be $C:$C

That way, while you change things and add things, the conditional formatting isn't there, but then you put it all back later.

If, at a later date, you need to add a few more rows, first change it from $C:$C to $C$1:$C$2, then make the changes, and then put it back to $C:$C. That way you don't have to completely rewrite all the formatting rules from scratch as you would if you do what I've done previously which was just delete them all, curse, and start again ;)

Obviously if you're planning on inserting rows up at the top in row 1 or 2, that won't work, but you could always set it to some other rows that you know you won't change.

于 2014-11-04T02:10:39.000 回答
3

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

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

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

就我而言,我想在相邻两行的值不同时呈现水平边框,例如:

=$A2 <> $A1

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

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

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

于 2018-01-05T02:03:12.250 回答
1

对我有用的是,当您插入一行时,不要从另一行复制格式。仅复制特殊粘贴公式。然后条件格式不会被拆分。

于 2014-12-04T19:17:31.443 回答
1

我意识到这是一篇旧帖子,但我遇到了同样的问题,并且已经想出了如何不获取拆分条件格式规则。

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

好吧,在我去现有行之间插入新行之前,它工作得很好。正如 OP 所描述的那样,规则将分裂。我碰巧查看了几个不同的网站,发现一个 Microsoft Office 网站向我指出了答案。它提到要突出显示要格式化的范围,但将公式更改为“=B2>TODAY()”。

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

于 2013-12-12T17:30:56.767 回答
1

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

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

于 2012-09-20T19:20:35.687 回答
1

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

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

于 2014-12-30T14:09:21.220 回答
1

这对我来说足够好......

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
于 2018-12-07T16:21:09.557 回答
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
于 2018-09-14T16:58:51.680 回答
1

我对这个确切问题的解决方案是从源副本中清除格式。脚步:

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

这对我使用 MS Excel 2016 有效

于 2016-09-08T03:25:42.103 回答
1
  1. 将条件格式应用于整个列,例如“$A:$A”。删除不同的单元格引用,例如“$A2: $A10”。

  2. 不要使用“插入行”,因为它会破坏条件格式。相反,将新数据条目作为新行附加到 Excel 表的最后一行之后。如果正在使用 vba,请使用它来识别最后一行。

  3. 使用“所有合并条件格式”选项“选择性粘贴”从最后一行到新行的列的当前公式和格式。

    last_row = Cells(Rows.Count, 1).End(xlUp).Row

    行(last_row)。复制

    行(last_row + 1).PasteSpecial xlPasteAllMergingConditionalFormats

  4. 根据需要使用 vba 重新排序表。

    例如 Range("A:AU").AutoFilter Field:=46, Criteria1:="TRUE"

于 2021-10-28T17:08:08.070 回答
0

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

如何将 Worksheet_Change 事件用于条件格式?

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

于 2012-09-18T16:37:12.033 回答
0

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

  1. 在包含要保留的条件格式的行或列的上方、下方或左侧或右侧执行所需数量的新行或列的简单“插入”。

注意 a) 您的条件格式会自动应用于插入的行或列,而无需您进一步执行任何操作。格式应该是从相邻的行或列继承的。b) 任何边框格式也应该被复制到新插入的单元格中。

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

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

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

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

于 2014-11-20T00:54:52.397 回答
0

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

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

然后我在微软的网站上找到了这个答案,它显示了在 CF 的公式部分引用表格的有效方法: 条件格式结构化引用


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

这就是我正在使用的:

tblTop Columns

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

这是通过使用公式=INDIRECT("tblTOP[Type]")="B"完成的

但是,当我去添加一行时,我将相同的格式应用于第二行:(。

在两行之间破坏了CF

有效的 CF 公式

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

=INDIRECT("tblTOP[@Type]")="B"

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

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

新行添加干净

新行按预期工作

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

希望这对表格中条件格式的人有所帮助。

于 2018-03-30T16:33:02.790 回答
0

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

于 2015-09-26T12:30:17.603 回答
-1

我通过以下步骤让它在 Excel Mac 2011 上工作

  • 插入新行
  • 复制它上面的一个(已经应用了条件格式)
  • 突出显示新行和PASTE SPECIAL -> MERGE CONDITIONAL FORMATTING

CF 规则保持未拆分并更新为包含一个附加行。

于 2015-07-14T09:30:10.633 回答