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

我正在寻找我认为是相当简单的代码,但似乎无法弄清楚。 实际上,我希望有人将值input到预定的单元格范围内。 一旦他们完成input他们的价值,我希望他们击中“保存button”。 作为validation检查的一部分,我想要发生两件事情:

  1. 如果他们的单元格的范围包含十进制/分数我想他们input的数字不正确地改变为红色。
  2. 最后,一旦他们纠正了他们的条目,我希望数字恢复到原来的黑色。

到目前为止,我一直在努力锻炼第一个代码(失败),一直没能思考代码的第二部分。

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 

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

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

您是否使用Excel VBAdebugging器? 只要使用debugging器就可以知道第一个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 

我认为你可以用条件格式来做到这一点。
首先,select要格式化的单元格。
在“ 条件公式”对话框中,select“ Use a formula to determine which cell to format

然后使用这个公式参考你select的第一个单元格。 =(A1-TRUNC(A1))<>0
这是假设你格式化单元格A1。
条件满足时设置所需的格式,在您的情况下文本颜色更改为红色。

结果:

在这里输入图像说明

使用数据validation来确保您只允许整数。 他们将无法input一个十进制数字开始。