问题是这个..当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
答案 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个单元格中的一个时,函数会自动更新,因此您可以获得实时结果。