【发布时间】:2018-11-11 05:11:50
【问题描述】:
我有一个FormatCondition。我正在阅读.Formula1 和.AppliesTo
我想查找公式是否包含一个单元格引用,该引用将在 ApplysTo 指定的范围内发生变化,例如 =NOT(ISNUMBER(C3)) 在范围 C3:D10 中。
据我所知,该引用可能是相对的(例如C3)或混合的(例如$C3 或C$3),但不是绝对的。它也将是基于https://www.ablebits.com/office-addins-blog/2014/08/07/relative-absolute-cell-references-excel-conditional-formatting/ 和其他一些网站的“应用范围内最左上角的单元格”。
如果范围类似于C3:D10,那么这很容易。使用例如myRange.Cells(1, 1) 查找左上角,使用.Address 或类似方法将其转换为字符串,然后在公式中查找该字符串,以及添加$ 的相关变体。当然,我必须小心字符串之类的东西(例如左上角的单元格是C3' and formula is="CC3NE"`),但这是可能的(不过,我欢迎关于如何做得更好的建议,但这不是问题)。
真正的问题是范围是否更复杂,条件格式似乎经常发生这种情况。一个例子是$CQ$39:$FT$39,$BE$39,$BE$8:$BE$9,$CU$8:$FT$9,$CU$12:$FT$14,$BE$12:$BE$14,$BE$16:$BE$30,$CQ$16:$FT$30,$CQ$32:$FT$36,$BE$32:$BE$36。 .Cells(1, 1) 没有给出正确的答案(BE8,根据 Excel 制定的公式)。
此外,如果范围类似于$A$5,$E$1 - 没有“左上角”。那么excel(或用户)如何决定公式中应该包含哪些内容?
因此主要问题是:Excel 确定在公式中使用哪个单元格的系统是什么,因为我不相信它是“左上角” - 它可能是“找到最上面的行,然后找到最左边的单元格',或者可能是相反的,或者完全不同的东西。
第二个问题是:如何才能最好地从给定范围内找到该单元格?
额外的问题(如果这里没有得到回答,我很高兴)是:有没有一种好方法可以在公式中找到对该单元格的引用,包括单元格的相对版本和混合版本?
请注意,这些奇怪的范围来自使用条件格式在工作表上剪切和粘贴的行和列,结果 Excel 将条件格式切碎(更改范围和更改公式,均无需用户输入)。因此,当务之急是处理在这种情况下 Excel 会将公式设置为独立的任何内容,不一定是用户可能会做的事情 - 但同时处理两者会更好。
【问题讨论】:
-
如果您复制/粘贴为 paste.special 值或 paste.special 公式,这将保留任何条件格式并保持不变...
-
感谢您的提醒,我知道这一点。但在尊重方面,这个问题是关于处理公式并适用于,而不是关于条件格式被搞砸的问题(这是它自己独立的问题,而且是一个大问题)。
-
看来你的问题包含了很多问题,而且都混在了一起。我正在阅读它,当你的陈述在问题之间不断跳跃时,我的注意力正在迷失。您应该将它们分开以获得好的答案。你自己解决问题的技巧也是如此;如果你把所有的问题都看成一个大问题,那就很难解决了,但是如果你把它们分开,那么每个小问题都可以很容易地解决。
-
@usmanhaq,感谢您的意见。我进行了编辑以使其更清晰。说实话,我通常的目标是更简洁 - 但上次我问一个问题时,我被告知只给出一个非常有限的目标或需要我犯了一个错误,因为他们需要一个更大的图片来看看这件事是否我问的是什至是这样做的方法。我并不完全同意这一点,但我仍然尝试提供一些背景信息,尤其是因为这不是我的专业领域。
标签: excel vba conditional-formatting