答案1
考虑到您的数据结构,我认为您只能使用 VBA 来实现您想要的效果。我创建了与您的数据结构类似的内容,并编写了一个每次添加行时都会运行的脚本。
Private Sub Worksheet_Change(ByVal 目标作为范围) Dim iTargRowsCnt 为 Long Dim oFCond As FormatCondition Dim sFCondRanges() 作为字符串 暗淡如长 Dim blnFCondRangeModified 作为布尔值 Dim sNewAppliesTo 作为字符串 如果 Target.Address = Target.EntireRow.Address 则 iTargRowsCnt = 目标.行.计数 对于 Me.UsedRange.FormatConditions 中的每个 oFCond sFCondRanges() = Split(oFCond.AppliesTo.Address, ",") 对于 i = LBound(sFCondRanges) 到 UBound(sFCondRanges) 如果不是 Intersect(Me.Range(sFCondRanges(i))(1), Target(1).EntireRow.Offset(iTargRowsCnt)) 则为空 sFCondRanges(i) = 范围(范围(sFCondRanges(i)), 范围(sFCondRanges(i)).偏移量(-iTargRowsCnt)).地址 blnFCondRangeModified = True 万一 下一个 如果 blnFCondRangeModified 则 对于 i = LBound(sFCondRanges) 到 UBound(sFCondRanges) sNewAppliesTo = sNewAppliesTo & sFCondRanges(i) & "," 下一个 sNewAppliesTo = Left(sNewAppliesTo,Len(sNewAppliesTo) - 1) oFCond.ModifyAppliesToRange 范围(sNewAppliesTo) blnFCondRangeModified = 假 sNewAppliesTo = "" 万一 下一个'oFCond 万一 子目录结束
每次插入行时,此代码都会自动运行。但使用 VBA 时要小心谨慎。虽然我已尽力降低风险,但保存次数越多,意外情况就越有可能出现。例如,很难设计出与撤消功能配合良好的代码。在这种情况下,如果您插入行然后使用撤消,条件格式就会失真。
答案2
我会坚持使用范围。应用条件格式时在顶部添加一个额外的行,然后隐藏它或以视觉方式对其进行处理(我个人会在某处将其用途标记为缓冲区行,这样就不会被错误删除)。
另一种方法是复制最上面的行,然后将其粘贴为新行的格式(目前不在计算机上,需要验证这是否适用于条件格式)。 编辑:确认适用于 O365 Business Plus:Excel 2016 中的条件格式。
答案3
使用范围 1:1000,它可能会变为全范围(A1:AZ1000,或类似的),但它会随着您添加更多行或列而更新,因此它将保持全范围
答案4
在应对类似的挑战后,我发现只需在“应用于:”条目中引用表名,就可以自动调整表中的任何更改,包括添加行:)。