【问题标题】:VBA Conditional Formatting with variable in formulaVBA条件格式与公式中的变量
【发布时间】:2018-05-15 23:21:20
【问题描述】:

尝试创建一个相对简单的宏来循环遍历除开头(命名)的工作表之外的每个工作表,并根据相关单元格的数值平均值对特定列中所有使用的单元格应用条件格式.

我一直无法将条件格式公式正确输入到单元格中。

示例:我想要的公式是 =R2>2(Average(R2:R*)) (其中 * 是最后使用的行)

但是,我在公式框中得到的是:="R2>2(Average(R2:R230))"(230 是该表上最后使用的行)

从脚本中删除语音标记会使用“预期:语句结束”来中断它

代码在这里,因为它也可能有其他问题:

Sub Bread()
    Dim LastRow As Long

    For Each Sheet In Sheets

    If Sheet.Name = "Base Details" Then

    Else
        Sheet.Cells.ClearFormats

        LastRow = Sheet.UsedRange.Rows.Count

            With Sheet.Range("R2:R" & LastRow)
                .FormatConditions.Add Type:=xlExpression, Formula1:="R2" & ">" & "2" & "(" & "Average" & "(" & "R2:R" & LastRow & "))"
                With .FormatConditions(.FormatConditions.Count)
                .SetFirstPriority
                With .Interior
                     .Color = RGB(255, 0, 0)

                End With
                End With

            End With
            With Sheet.Range("R2:R" & LastRow)
                .FormatConditions.Add Type:=xlExpression, Formula1:="R2" & "<" & "0.1" & "*" & "(" & "Average" & "(" & "R2:R" & LastRow & "))"
              With .FormatConditions(.FormatConditions.Count)
                .SetFirstPriority
                With .Interior
                     .Color = RGB(255, 255, 0)

                 End With
                 End With

            End With

    End If


Next Sheet


End Sub

非常感谢!

【问题讨论】:

  • 您需要在2( 之间有一个*
  • 这并不能解决您的问题,但我相信以下内容更具可读性:Formula1:="R2&gt;2*(Average(R2:R" &amp; LastRow &amp; "))" 您说您得到了 230,而 230 是工作表上最后使用的行。您还说您想要最后使用的行,所以我对问题所在感到困惑。
  • @JNevill Soryr,我说得不够清楚。我遇到的问题是,当将公式添加到条件格式中时,它会获得额外的语音标记 - 在 = 之后直接查看。感谢您更新的文本,这确实使其更易于阅读。
  • 哦!我懂了。您设置的公式用双引号括起来。现在这是有道理的。我真的在那个问题上摸不着头脑。
  • 看起来你已经涵盖了这两个答案。你只需要一个=Formula1:="=YourFormula"那样在那儿签名

标签: vba excel


【解决方案1】:

我想这就是你要找的东西:

Sub Bread()

    Dim ws As Worksheet
    Dim LastRow As Long

    For Each ws In ActiveWorkbook.Sheets
        If ws.Name <> "Base Details" Then
            ws.Cells.ClearFormats
            LastRow = ws.UsedRange.Rows.Count
            With ws.Range("R2:R" & LastRow)
                .FormatConditions.Add Type:=xlExpression, Formula1:="=R2>2*Average($R$2:$R$" & LastRow & ")"
                .FormatConditions(.FormatConditions.Count).Interior.Color = RGB(255, 0, 0)
                .FormatConditions.Add Type:=xlExpression, Formula1:="=R2<0.1*Average($R$2:$R$" & LastRow & ")"
                .FormatConditions(.FormatConditions.Count).Interior.Color = RGB(255, 255, 0)
            End With
        End If
    Next ws

End Sub

【讨论】:

  • 比我的干净多了!谢谢!
【解决方案2】:

我看到了两个问题。首先,正如 Scott Craner 所指出的,您在 2Average 之间缺少一个运算符。其次,您需要在公式的开头(在 R2 的第一个实例之前)使用 =

Formula1:="=R2" & ">" & "2 * " & "(" & "Average" & "(" & "R2:R" & LastRow & "))"

希望对您有所帮助。

【讨论】:

  • 做到了!谢谢!
猜你喜欢
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 2017-08-14
  • 2017-03-03
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多