基于动态列 Headers 的条件格式透视 Table
Conditional Formatting Pivot Table based on Dynamic Column Headers
感谢您给 VBA 的新手一点帮助和指导。
我正在尝试为数据透视 table(s).
中的条件格式编写宏
目标是通过 headers 找到两列(因为它们的位置可能会改变)并对其中一列应用条件公式。 (以红色突出显示离群细胞)
Header在第 3 行
以 A
开头的列
示例如下:
我想找到有始发机场的栏目,
然后找到具有 Origin Handling 的列,
创建一个有 2 个条件进行比较的公式,例如B4 与 B5(匹配)和 D4 与 D5(匹配),然后突出显示 Origin Handling(D 列)中不一致的任何值,其中 D4 <> D5.
以下公式我用来测试一致性 "=(AND($B4=$B5,D4<>D5)"
! [table] (https://imgur.com/s6cQ08L)
的屏幕截图
我已经浏览了这里关于 SO 的各种帖子,并将我认为适用的代码放在一起。作为一个新手,但是我没有得到正确的流程,我正在逐段尝试,但是在试图找到一个代码时遇到了困难,该代码通过 find: Header 提供列字母,然后创建一个公式。以下代码序列不完整。
Sub Origin_Charges
' Review origin charges based on Consistency
With ActiveSheet.PivotTables("Origin") 'focuses on the Pivot Table I named Origin'
Dim ws as worksheet
Dim rngDateHeader As Range
Dim rngHeaders As Range
End with
Set rngHeaders = Range("3:3") 'Looks in entire first row; adjust as needed.
Set rngDateHeader = rngHeaders.Find("Origin Airport")
If rngDateHeader is Nothing then "No Origin Airport Column Found"
Set rngHeaders = Range("3:3") 'Looks in entire first row; adjust as needed.
Set rngDateHeader = rngHeaders.Find("Origin Handling")
If rngDateHeader is Nothing then "No Origin Handling Column Found"
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=AND($B4=$B5,D4<>D5)" 'Formula right now is fixed but want it to adjust based on what column Origin Airport is in'
Selection.FormatConditions(Selection.
FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
With Sheets("Origin")
.Range("D4").AutoFill .Range("D4:D" & .Cells(.Rows.count,"C")
.End(xlUp).row)
End With
End Sub
非常感谢任何帮助。
你可以这样做:
Dim c As Range, sht As Worksheet, f as string
Set sht = Activesheet
Set c = sht.Cells(4, rngDateHeader.Column) 'eg B4
f = "=AND(" & c.address(false, false) & "=" & _
c.offset(1,0).address(false, false) & ",D4<>D5)" '<< use formula f in your CF
感谢您给 VBA 的新手一点帮助和指导。
我正在尝试为数据透视 table(s).
目标是通过 headers 找到两列(因为它们的位置可能会改变)并对其中一列应用条件公式。 (以红色突出显示离群细胞)
Header在第 3 行
以 A
示例如下:
我想找到有始发机场的栏目,
然后找到具有 Origin Handling 的列,
创建一个有 2 个条件进行比较的公式,例如B4 与 B5(匹配)和 D4 与 D5(匹配),然后突出显示 Origin Handling(D 列)中不一致的任何值,其中 D4 <> D5.
以下公式我用来测试一致性 "=(AND($B4=$B5,D4<>D5)"
! [table] (https://imgur.com/s6cQ08L)
的屏幕截图我已经浏览了这里关于 SO 的各种帖子,并将我认为适用的代码放在一起。作为一个新手,但是我没有得到正确的流程,我正在逐段尝试,但是在试图找到一个代码时遇到了困难,该代码通过 find: Header 提供列字母,然后创建一个公式。以下代码序列不完整。
Sub Origin_Charges
' Review origin charges based on Consistency
With ActiveSheet.PivotTables("Origin") 'focuses on the Pivot Table I named Origin'
Dim ws as worksheet
Dim rngDateHeader As Range
Dim rngHeaders As Range
End with
Set rngHeaders = Range("3:3") 'Looks in entire first row; adjust as needed.
Set rngDateHeader = rngHeaders.Find("Origin Airport")
If rngDateHeader is Nothing then "No Origin Airport Column Found"
Set rngHeaders = Range("3:3") 'Looks in entire first row; adjust as needed.
Set rngDateHeader = rngHeaders.Find("Origin Handling")
If rngDateHeader is Nothing then "No Origin Handling Column Found"
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=AND($B4=$B5,D4<>D5)" 'Formula right now is fixed but want it to adjust based on what column Origin Airport is in'
Selection.FormatConditions(Selection.
FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
With Sheets("Origin")
.Range("D4").AutoFill .Range("D4:D" & .Cells(.Rows.count,"C")
.End(xlUp).row)
End With
End Sub
非常感谢任何帮助。
你可以这样做:
Dim c As Range, sht As Worksheet, f as string
Set sht = Activesheet
Set c = sht.Cells(4, rngDateHeader.Column) 'eg B4
f = "=AND(" & c.address(false, false) & "=" & _
c.offset(1,0).address(false, false) & ",D4<>D5)" '<< use formula f in your CF