如果条件不在excel中,则很简单

时间:2013-06-26 06:25:17

标签: excel excel-vba if-statement for-loop vba

For Row = row_start To l1 + row_start
    For Column = col_start To l2 + col_start
        If Cells(Row, Column).Value = Cells(2, Column).Value Or Cells(Row, Column).Value = Cells(Row, 2).Value Then
            Cells(Row, Column).Interior.ColorIndex = 3
        End If
    Next Column
Next Row

这是我正在执行的宏的一部分。 My Row变量从5到33运行,Column变量从6到34运行。我在AA6和AA2中的值为824.6。同样,AB7和AB2中的824.8。 AC8和AC2中的值为825。等等......但是,只有AC8被涂成红色而不是其他颜色。我不明白错误在哪里。有人可以帮忙吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

这些值是否完全您所声明的是什么,或者它们是否显示为圆形?

Value属性将使用单元格中的实际值,而不是其显示的值。因此,使用一位小数格式化的824.6824.5999不同的值。

最好的办法是在可疑单元格之间设置一个消息框(或某个公式)。

例如,在下面的工作表中,A1为824.6,B1的格式为数字,小数点后一位,设置为824.5999。 C1格式为general并设置为=a1-b1

      A       B       C
1   824.6   824.6   1E-04

至于如何解决这个问题(如果是问题),我相信单元格的Text属性会显示在屏幕上。如果你使用它,它应该考虑单元格格式等。

您还可以使用以下内容:

MsgBox "diff = " & CStr(Range("b1").Value - Range("a1").Value)

除此之外,我建议您使用F8单步执行宏(步入)并将单元格添加到您的监视列表中,以便您可以看到它们是什么。

答案 1 :(得分:0)

我不明白你代码中的l1l2是什么?

作为测试,请使用硬编码值替换并尝试以下操作:

Sub xxx()

Dim row
Dim column
Dim row_start As Integer
Dim col_start As Integer
row_start = 5
col_start = 6

For row = row_start To 33
    For column = col_start To 34
        If Cells(row, column).Value = Cells(2, column).Value Or Cells(row, column).Value = Cells(row, 2).Value Then
            Cells(row, column).Interior.ColorIndex = 3
        End If
    Next column
Next row

End Sub

找出正在发生的事情的最简单方法是将光标放在代码中并点击F8然后不断点击F8逐步完成循环。将以下两个表达式添加到Watch窗口,以便您可以监控它们的值(不带引号),并希望找到不符合您标准的单元格:

  1. “单元格(行,列).Value =单元格(2,列).Value”
  2. “Cells(row,column).Value = Cells(row,2).Value”