如何防止条件格式设置公式和范围自动更改?


24

我发现,当您在电子表格中复制,删除或移动数据时,条件格式设置公式和范围会自动调整。尽管这是一个不错的主意,但它倾向于以某种相当怪异的方式为我打破事情。

为避免这种情况,我尝试编写适用于整个电子表格的规则,并从列标题中键入关键字以突出显示要检查的数据。

示例:=AND(A$1="Check This Column For Blanks),ISBLANK(A1))应用于=$1:$1048576

但是,即使规则已明确应用于整个工作表,当我在工作表中工作时,它仍然会自动进行调整(并以此方式进行怪异的破坏)。

如何避免这种情况?


也许您只是无法使用整个电子表格...您能否举一个具体例子说明您在做什么?
Doktoro Reichard

您可能有一张屏幕截图,并指出哪些地方坏了吗?
杰里

@JohnBensin听起来正是我要找的东西。我会尽力记住下一次。
Iszi 2013年

@Iszi我将其添加为答案。我确定您知道如何添加命名范围,但是我在将来的访问者的答案中包括了详细信息(并且因为当我第一次学习使用Excel时,我不记得了)。
John Bensin

一篇关于到底出了什么问题的文章:Excel 2010条件格式梦night。他们确实想让它变得更好的同时使情况变得更糟……
RomanSt

Answers:


7

当我需要一个在任何情况下都不应改变的范围时,包括移动,插入和删除单元格,我使用了一个命名范围和INDIRECT函数。

例如,如果我希望某个范围始终应用于单元格A1:A50,则可以通过名称管理器定义一个命名范围:

添加命名范围

在名称管理器中,添加一个新范围(单击“新建”),然后在“引用至:”字段中,使用INDIRECT函数指定所需单元格的范围,例如=INDIRECT("A1:A50")=INDIRECT("Sheet!A1:A50")。因为从技术上讲,该范围只是一个文本参数,所以重新排列单元格的数量不会导致Excel更新它。

此外,此功能至少在Excel 2010和Excel 2013中有效。尽管我的屏幕截图来自2013年,但我过去在2010年一直使用此精确技术。

注意事项

  1. 请记住,这种不变性也会使您绊倒。例如,如果您更改工作表的名称,则命名范围将中断。

  2. 我注意到在大量单元上使用此策略时,性能会受到轻微影响。我在工作中使用的模型将这种技术与跨越数千个不同单元格范围的命名范围一起使用,并且当我更新这些范围内的单元格时,Excel感觉有点迟钝。这可能是我的想象,也可能是Excel正在对INDIRECT进行其他函数调用的事实。


尽管命名范围提供了一种方便的快捷方式来引用目标单元格,但您难道不能仅使用该INDIRECT函数吗?
Iszi 2013年

@Iszi是的,我相信是的。但是,正如您所说,命名范围很方便,而且我经常发现自己在整个工作簿中的多个位置都引用了相同的单元格范围。出于性能原因,我尝试将范围保持尽可能小,并且仅在必要时更改它们,因此使用命名范围意味着我只需要在一个位置进行更改。
John Bensin

@Iszi您是否最终使用了此方法?如果您遇到我没有提到的任何陷阱或缺点,请告诉我或将其编辑为答案。我在足够多的地方使用了这种策略,所以我不想让任何事情再次困扰您或我。
John Bensin

我还没有实现它,但是下次我遇到这个问题时可能会这样做。如果有任何问题,我会通知您。
Iszi 2013年

9
我尝试在条件格式规则管理器的“适用于”列中使用命名范围,但是当我单击“确定”或“应用”时,命名范围会扩大。我做错了吗?
Mihai AlexandruBîrsan2014年

2

我发现规则很容易被破坏,但是您可以尝试一些似乎没有违反任何规则的方法。

您可以更改单元格内的文本。如果需要添加一行,请在表末尾添加数据并重新排序。如果您需要删除一行,只需删除文本/数字,然后对表格重新排序。

当我有适用于列的条件格式设置时,这对我有用,例如,我通常为整个列设置格式设置。$ F:$ F。如果要格式化部分范围,它仍然应该起作用,只需确保完成添加/删除和重新排序后,所有要格式化的数据仍在原始范围参数内。

我也感到非常沮丧。

我希望这有帮助。


1

我不SO肯定和我经常面临同样的问题。

我想说,“条件格式(CF)”面板中的“应用于”字段将始终动态运行。因此,它将始终将任何引用转换为格式=$A$1:$A$50

真痛苦


即使我使用显式或变量声明($或不使用$),也不会这样做。
保罗

1

我发现使用INDIRECT功能和ROW在条件格式规则函数消除了Excel创建新规则和更改范围的问题。

例如,当月份从一行更改为另一行时,我想在支票簿注册电子表格的行之间添加一行。因此,我在CF规则中的公式是:

=MONTH(INDIRECT("C"&ROW()))<>MONTH(INDIRECT("C"&ROW()-1))

电子表格中的C列包含日期。我不必对该范围做任何特殊的事情(不必定义范围名称等)。

因此,在原始海报的示例中,请使用CF规则,而不要使用“ A1”或“ A $ 1”:

INDIRECT("A"&ROW())

0

我遇到了一个非常相似的问题。我已经制作了一些宏来添加行,复制公式,然后调整列和行大小以设置工作表的格式。我发现此问题发生在两种情况之一。

1)当INSIDE中的内容应用于或超出此范围时,将其粘贴/粘贴。

2)当“应用到”中有合并的单元格时,任何行或列都将进行调整。

似乎在合并单元格问题期间,excel必须取消所有内容,重新计算其条件应用程序,调整所有单元格(添加或删除行或不行),然后重新合并它们。它对我们来说是看不见的,但似乎是如何应用它的。

认为可以帮助我们在此问题上找到解决方案。

-T


0

我对此有一个简单的解决方案。

只需将鼠标移至范围内的一个单元格(未超出范围的单元格)中,单击“格式刷”,然后粘贴到整个列上即可。它将再次显示已损坏的位置,您只需要对已损坏范围的单元格进行格式刷。现在,这似乎也有些冗长,您可以为此构建一个简单的宏。


0

在条件格式公式中,将R1C1符号与INDIRECT函数一起使用:
示例1:

If same row column A = 1 ...

=IF($A1=1,1,0) becomes 
=IF(INDIRECT("RC1",FALSE)=1,1,0)

示例2:
If same row column A = 2 AND next row column A = 3...

=IF(AND(($A1=2),($A2=3)),1,0) becomes
=IF(AND((INDIRECT("RC1",FALSE)=2),(INDIRECT("R[1]C1",FALSE)=3)),1,0)

0

如果用例是生成报告电子表格,那么这应该很好用:


如果您还愿意在完成所有数据输入后手动对最终数据进行简单刷新,则可以通过几个一次性的设置步骤来绕过Excel 的过多帮助。

假设您的数据排列正常(行):

  1. 将所有数据输入一张纸。在本教程中,我将命名该工作表Input不要对其应用任何条件格式。随意将值转移到您心脏的内容上(例如删除/插入/复制/粘贴)
  2. 创建另一个空表并根据需要命名(例如 Output)。手动复制全局格式,例如列宽和标题格式(不是标题的内容,只是格式)。
  3. 替换$A$1:用你的标题行的起始位置下面的公式,然后在你想输出的所有列和行复制=IF(LEN(OFFSET(Input!$A$1,ROW()-1,COLUMN()-1))>0,OFFSET(Input!$A$1,ROW()-1,COLUMN()-1),"") (该IF(LEN(...)>0,...,"")声明是必要的,因为Excel中也有益,为您和用途来确定数据类型0为空单元格,否则,和这些-1术语来自偏移量与序数语义)
  4. 应用条件格式的Output片材。

这会将您的Input数据表复制到工作Output表中,而不会像Excel会自动屠宰任何单元格一样,因此您可以放心地在工作Output表上定义条件格式。

您只需要在数据Output大小Input更改时手动扩展公式在工作表中应用的范围即可。

我建议您避免合并任何单元格。


PS这个问题已经被问过很多次了(它也适用于Excel的克隆版Google表格),因此您可以通过以下情况为您的用例找到更好的解决方案:

  1. Excel条件格式碎片
  2. (这一节)如何防止条件格式设置公式和范围自动更改?
  3. 保留剪切粘贴的条件格式
  4. Excel:如何将条件格式永久应用于整个电子表格?
  5. Excel为什么要宰我的条件格式?

0

如果粘贴时没有格式(Paste > Paste Special > Unicode Text或类似格式),则不会复制特殊格式,因此“适用于”范围不应更改。

您可以删除行/列,但是如果您插入它们,则“适用于”范围将被拆分。

通过选择“光标”左下方小方块上的最后一行/列和“复制-拖动”,可以扩展区域。这样,“应用于”范围应保持不变。(请注意,这不会像insert那样在行或列上扩展任何公式。)

但是,要记住要粘贴没有格式的内容是一件很痛苦的事情。我通常不会。

有时,我还会为要格式化的区域定义一个名称。它不会在规则中使用,但是您可以通过删除除一个规则之外的所有规则来清理规则,并使用“适用于”部分中的区域名称。

我已经在Mac上使用Excel 16.3(我认为Office 2016 ... hmm)进行了测试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.