【问题标题】:For each cell in range if cell is negative then change color对于范围内的每个单元格,如果单元格为负数,则更改颜色
【发布时间】:2019-01-07 23:02:32
【问题描述】:

我对 VBA 非常了解,我正在尝试检查是否在 M 列的特定范围内是否有负数以及是否要将字体更改为红色。这仅适用于我报告中的第一个数字。我觉得我犯了一个小错误,所以请告诉我。

Sub Format_M_Column()

    Range("M:M").Select
    With Selection
        Selection.NumberFormat = "0.00"
        .Value = .Value
    End With

    For Each cell In Range("M:M")
        If cell.Value < 0 Then
            cell.Font.ColorIndex = 3
            Exit For
        End If
    Next cell

End Sub

【问题讨论】:

  • 0.00;[Red]-0.00 的自定义格式无需 vba 即可完成
  • 我知道,但我正在尝试制作这个 vba,因为它会在我的报告中包含其他内容。
  • @ScottCraner 好的,现在我从 Peh 的示例中看到它可以在 vba 中使用。这节省了空间的损失。谢谢!

标签: vba excel


【解决方案1】:

正如 ScottCraner 指出的那样,这应该就是您所需要的,并且应该更快没有那个循环。

Sub Format_M_Column()
    With Range("M:M")
        .NumberFormat = "0.00;[Red]-0.00"
        .Value = .Value
    End With
End Sub

【讨论】:

    【解决方案2】:

    删除Exit For。它退出 for - 循环:

    Excel VBA - exit for loop

    【讨论】:

    • 天哪,谢谢!我在这个线程中关注了一个答案,并提到要保留它。我猜我没有正确理解为什么那个特定的人必须保留它。
    【解决方案3】:

    试试这个代码(可能比你的更快)

    Sub Format_M_Column()
    Dim rng As Range
    Dim cel As Range
    
    Application.ScreenUpdating = False
        Set rng = Intersect(ActiveSheet.UsedRange, ActiveSheet.Columns(13))
    
        With rng
            .NumberFormat = "0.00"
            .Value = .Value
            For Each cel In rng
                If cel.Value < 0 Then cel.Font.ColorIndex = 3
            Next cel
        End With
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2015-11-16
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2013-06-25
      相关资源
      最近更新 更多