从细胞中读取负值

时间:2011-08-25 13:47:06

标签: excel vba

问题是这个..当ActiveSheet.Cells(14,5).Value类似于-1.3时,我的代码失败了......是什么导致了这个?

Function TestCell() As Integer
    Dim Boon As Integer
    Dim nextBoon As Integer
    Dim nextTwo As Integer
    Dim nextOne As Integer
    Dim nextThree As Integer

    Boon = ActiveSheet.Cells(14, 5).Value
    nextBoon = ActiveSheet.Cells(14, 6).Value
    nextTwo = ActiveSheet.Cells(14, 7).Value
    nextOne = ActiveSheet.Cells(14, 8).Value
    nextThree = ActiveSheet.Cells(14, 9).Value
    If Boon <= 1.8 And Boon >= -1.8 Then
        If nextBoon <= 1000 And nextBoon >= -1000 Then
            If nextTwo <= 0.36 And nextTwo >= -0.36 Then
                If nextOne <= 0.13 And nextOne >= -0.13 Then
                    If nextThree <= 1.2 And nextThree >= -1.2 Then
                        TestCell = 1
                    Else
                        TestCell = 0
                    End If
                Else
                    TestCell = 0
                End If
            Else
                TestCell = 0
            End If
        Else
            TestCell = 0
        End If
    Else
       TestCell = 0
    End If
End Function

2 个答案:

答案 0 :(得分:3)

您的Boon被声明为Integer&gt;&gt; http://msdn.microsoft.com/fr-fr/library/06bkb8w2(v=vs.80).aspx

如果Boon = ActiveSheet.Cells(14, 5).Value-1

,则ActiveSheet.Cells(14, 5).Value将返回-1.3

如果您想要它,您需要使用Double

Function TestCell() As Integer
    Dim Boon As Double

答案 1 :(得分:3)

正如JMax所说,对Boon使用Double而不是Integer。我真的很想给你两点建议,因为你的代码长度是它的2倍:

首先,不要使用else语句。只需声明测试单元为0并执行if-thens以查看是否可以将其更改为1。

其次,如果你只使用一个单元格2次,将它存储为变量没有特别的好处(在另一方面你会失去可读性)。只需使用“cells(15,5。).value”等。您也不应指定活动表 - 默认情况下它使用活动表。

从长远来看,这两个提示可以帮助你,这是一个很好的做法。

<强>更新

请允许我介绍一种更快,更有效的方法来实现这一目标。你传递它在5个单元格范围内。这样做,您只需将公式一直拖到列中,它就可以适用于每个单元格。

在您的示例中,您可以使用以下方法调用它:

  

= TestCell(E14:I14)

Function TestCell(ByVal myRange As Range) As Long

Dim vArray As Variant
Dim result As Long
result = 0

vArray = myRange.Value

If vArray(1, 1) <= 1.8 And vArray(1, 1) >= -1.8 Then
    If vArray(1, 2) <= 1000 And vArray(1, 2) >= -1000 Then
        If vArray(1, 3) <= 0.36 And vArray(1, 3) >= -0.36 Then
            If vArray(1, 4) <= 0.13 And vArray(1, 4) >= -0.13 Then
                If vArray(1, 5) <= 1.2 And vArray(1, 5) >= -1.2 Then
                    result = 1
                End If
            End If
        End If
    End If
End If

TestCell = result

End Function

工作原理:将5个单元格范围转换为变量数组(可以包含整数,字符串,双精度等)。检查是使用varray完成的,因为它非常快,有效,而且您不需要担心数据类型(主要好处之一是能够将整个范围转储到vArray中,就像我在代码中看到的那样)。由于我们将结果设置为0,因此我们不需要任何else语句,只需执行if-thens以查看值是否可以更改为1。

使用此方法,计算可以在几微秒内完成,并且每当更改5个单元格中的一个时,函数会自动更新,因此您可以获得实时结果。