【发布时间】:2019-11-24 17:23:35
【问题描述】:
感谢您给 VBA 新手一些帮助和指导。
我正在尝试为数据透视表中的条件格式编写宏。
目标是按标题查找两列(因为它们的位置可能会发生变化)并将条件公式应用于其中之一。 (用红色突出异常单元格)
标题位于第 3 行
以 A 开头的列
示例如下:
我要查找包含 Origin Airport 的列,
然后找到具有原始处理的列,
创建一个具有 2 个比较条件的公式,例如B4 与 B5(匹配)和 D4 与 D5(匹配),然后突出显示原始处理(D 列)中不符合要求的任何值,其中 D4 D5。
我用来测试一致性的以下公式 "=(AND($B4=$B5,D4D5)"
! [表格截图] (https://imgur.com/s6cQ08L)
我在这里浏览了关于 SO 的各种帖子,并将我认为适用的代码放在一起。作为一个新手,但是我没有得到正确的流程,正在尝试逐段尝试,但在尝试查找通过 find: Header 提供列 Letter 然后创建公式的代码时遇到了问题。以下代码序列不完整。
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
非常感谢任何帮助。
【问题讨论】:
-
rngDateHeader.EntireColumn.Cells(4).Address(false, false)例如,如果标题在 ColB 中,则会给您“B4” -
我缺少查找两个标题(位置)然后基于列创建公式的逻辑步骤。基本上是在 Find("Origin Handling") 之后对公式进行编程的步骤。
-
@TimWilliams 感谢蒂姆,我怎样才能让公式在您的示例中捕获 B4?
-
找到此代码:[链接] (stackoverflow.com/questions/32014492/…) 他正在使用 vlookup 作为其公式的一部分。有没有办法将 rngeheader.find / Tim 的建议作为公式的一部分?
标签: excel vba dynamic pivot-table conditional-formatting