【发布时间】:2017-01-12 04:58:55
【问题描述】:
我正在尝试跟踪工作表并突出显示以空白值或 0 值(或“NaN”)值返回的单元格。我编写了一个嵌套的 for 循环来为我执行此操作,但是,我看到了一个奇怪的项目。
如果值等于 0,则有问题的单元格应变为红色。但是,当我运行宏时,最终结果是所有通过 if statement 条件的单元格都以黄色结尾,即使为 0。也许是 VBA将空白单元格读取为 0,或者单元格不是真正的空白?我犯了错误,还是我对 VBA 的逻辑不正确?
'i is for the columns
For i = 2 To 4 'lastColumn
totalCounter = 0
outageCounter = 0
missingCounter = 0
'j is for the rows
For j = 6 To lastRow
'highlight if production outage
If mainSheet.Cells(j, i).Value = 0 Then
mainSheet.Cells(j, i).Interior.Color = vbRed
outageCounter = outageCounter + 1
End If
'highlight if comm outage
If mainSheet.Cells(j, i).Value = "" Or mainSheet.Cells(j, i).Value = "NaN" Then
mainSheet.Cells(j, i).Interior.Color = vbYellow
missingCounter = missingCounter + 1
End If
totalCounter = totalCounter + 1
Next j
mainSheet.Cells(lastRow + 2, i).Value = missingCounter
mainSheet.Cells(lastRow + 3, i).Value = outageCounter
mainSheet.Cells(lastRow + 4, i).Value = totalCounter
【问题讨论】:
-
我相信你是对的——即使单元格中的值为空白,你的初始
IF也会为真。 -
好奇:您使用的“NaN”是什么? AFAIK,Excel 没有 NaN 值(如“不是数字”),除非您的数据中只有字符串“NaN”。
-
您的代码会将空单元格、包含
""的单元格和包含"NaN"的单元格设置为黄色(在第一次将空单元格更改为红色很短时间之后)。但是,正如您在问题中所说的那样,您的代码没有理由将包含0的单元格更改为黄色(“所有通过 if 语句条件的单元格都以黄色结尾,即使为 0”)。您是否 100% 确定包含0的单元格最终会显示为黄色?!? -
@YowE3K 我想我可以回答 OP。当单元格中没有任何内容时,
.Value将匹配If语句中的 0 或 "",因此,是的,这两个条件都会满足。 -
@vknowles - 但这并不能解释
0如何以黄色结束 - 只是为什么空单元格以黄色结束(在短时间内变为红色后)。