如果单元格值等于十进制,则更改字体颜色

时间:2015-03-23 21:52:49

标签: excel vba excel-vba

我正在寻找我认为相当简单的代码,但似乎无法弄明白。 实际上,我希望有人将值输入到预定范围的单元格中。 一旦他们完成输入他们的值,我希望他们点击“保存按钮”。 作为验证检查的一部分,我想要做两件事:

  1. 如果他们的单元格范围包含小数/小数,我希望他们输入的数字不正确地更改为红色。
  2. 最后,一旦他们纠正了他们的输入,我希望这些数字恢复原来的黑色。
  3. 到目前为止,我一直在努力训练第一个代码(失败)并且无法通过代码的第二部分进行思考。

    Sub ChangeColorNotNumeric()
        Dim i As Long
        Dim rCell As Range
        Dim rRow As Range
        Dim rRng As Range
    
        'identify the range to search
        Set rRng = Sheet1.Range("Hello")
    
        For i = rRng.Rows.Count To 1 Step 10
            'loop through all the cells in the row
            For Each rCell In rRng.Rows(i).Cells
                If Not IsNumeric(rCell.Value) Then
                    'delete the row and go to the next one
                    rCell.Interior.Color = RGB(255, 0, 0)
                    Exit For
                End If
            Next rCell
        Next i
    End Sub
    

3 个答案:

答案 0 :(得分:1)

我认为您可以使用条件格式来执行此操作 首先,选择要格式化的单元格 在条件公式对话框中,选择Use a formula to determine which cell to format

然后使用此公式引用您选择的第一个单元格。 =(A1-TRUNC(A1))<>0这就是假设您正在格式化单元格A1 在满足条件时设置所需的格式,在您的情况下,文本颜色变为红色。

<强>结果:

enter image description here

答案 1 :(得分:0)

要使用VBA而不是条件格式,您的示例很容易完成。当重新调用该函数时(当最终用户再次按下“保存”按钮时),该函数将恢复所有现在正确的单元格的黑色字体/透明单元格颜色。

你的循环也有不正确的步数值。我也删除了Exit For,因为我认为你会希望一行中所有列中的所有不正确的值都显示为坏,而不是仅仅是第一列是坏的。您没有表明负数是否可以接受。如果负数是可接受的,那么你应该检查VBA的Int和Fix函数之间的区别;它们都截断了小数值,但处理的负数与另一个略有不同。

您使用的是Excel VBA调试器吗?只是使用调试器会让你觉得第一个For语句总是退出而不是循环,因为Step值不是负数。

Public Sub ChangeColorNotNumeric()
Dim i As Long
Dim rCell As Range
Dim rRow As Range
Dim rRng As Range

'identify the range to search
Set rRng = Sheet1.Range("Hello")

For i = rRng.Rows.Count To 1 Step -1
    'loop through all the cells in the row
    For Each rCell In rRng.Rows(i).Cells
        If Not IsNumeric(rCell.Value) Then
            rCell.Interior.Color = RGB(255, 0, 0)
        ElseIf rCell.Value <> Int(rCell.Value) Then
            rCell.Font.Color = RGB(255, 0, 0)
        Else
            rCell.Interior.ColorIndex = xlNone
            rCell.Font.Color = RGB(0, 0, 0)
        End If
    Next rCell
Next i
End Sub

答案 2 :(得分:0)

使用数据验证确保您只允许整数。他们无法输入十进制数字。