Excel 测试值是否为长或整数(无小数点)
我需要测试textbox1和textbox2中的值是整数还是长(没有小数点) 我试过这样的方法:Excel 测试值是否为长或整数(无小数点),excel,vba,integer,long-integer,Excel,Vba,Integer,Long Integer,我需要测试textbox1和textbox2中的值是整数还是长(没有小数点) 我试过这样的方法: Dim x As Integer Dim y As Integer x = TextBox1.Value y = TextBox2.Value If x = Int(x) Then 'my code Else MsgBox("value is not an integer") 如果我将x=2.3,它不会显示MsgB
Dim x As Integer
Dim y As Integer
x = TextBox1.Value
y = TextBox2.Value
If x = Int(x) Then
'my code
Else
MsgBox("value is not an integer")
如果我将x=2.3,它不会显示MsgBox,但会将值舍入为2。由于您已将
x
的类型指定为整数
,因此已将文本框字符串转换为整数。因此,Int(x)
是不可行的
解决方法之一是使用
If IsNumber(TextBox1.Value) Then
If Fix(TextBox1.Value) = TextBox1.Value Then
'I am an integeral type.
End If
End If
这里,Fix
截断一个数字类型,我依靠VBA进行正确的比较。请注意,VBA没有实现短循环的和
,因此需要使用嵌套的If
或类似项。由于已将x
的类型指定为整数
,因此已将文本框字符串转换为整数
。因此,Int(x)
是不可行的
解决方法之一是使用
If IsNumber(TextBox1.Value) Then
If Fix(TextBox1.Value) = TextBox1.Value Then
'I am an integeral type.
End If
End If
这里,Fix
截断一个数字类型,我依靠VBA进行正确的比较。请注意,VBA没有实现短循环的和
,因此需要使用嵌套的If
或类似方法。这里是另一种方法(伪代码,所以请检查语法!)
下面是另一种方法(伪代码,请检查语法!)
在VBA中,不能Dim var as Decimal
,但可以Dim var as Variant
并使用var=CDec(…)
在变量中存储十进制数据类型。即便如此,我发现小数后有14或15个零的小数加上一个数字(或从一个整数中减去的等效小数)会四舍五入为一个整数。我还没有找到区分小小数和整数的解决方案。在VBA中不能Dim var as Decimal
,但可以Dim var as Variant
并使用var=CDec(…)
在Variant中存储十进制数据类型。即便如此,我发现小数后有14或15个零的小数加上一个数字(或从一个整数中减去的等效小数)会四舍五入为一个整数。我还没有找到区分小小数和整数的解决方案。我会检查TextBox1.Value
是否为整数,因为在设置x
时,该值是四舍五入的x
将保持一个整数,而TextBox1.Value
不必是一。哦,我没想到这一点。它现在工作得很好,谢谢。通常情况下,您可以将值赋给一个整数(隐式截断十进制数字),再赋给一个浮点数,然后与源代码进行比较。或者,将源编号与其舍入值进行比较。如果相同,则为整数,否则为小数。@Bathsheba刚刚发送了与我上面提到的相同的解决方案。@FDavidov:是的,这不是一个很糟糕的方法,尽管它在2的52次方之后会崩溃。顺便说一句,请考虑重新整理您的评论以获得答案:我将向上投票。我会检查TextBox1.Value
是否为整数,因为在您设置x
时,该值是四舍五入的x
将保持一个整数,而TextBox1.Value
不必是一。哦,我没想到这一点。它现在工作得很好,谢谢。通常情况下,您可以将值赋给一个整数(隐式截断十进制数字),再赋给一个浮点数,然后与源代码进行比较。或者,将源编号与其舍入值进行比较。如果相同,则为整数,否则为小数。@Bathsheba刚刚发送了与我上面提到的相同的解决方案。@FDavidov:是的,这不是一个很糟糕的方法,尽管它在2的52次方之后会崩溃。顺便说一句,请考虑重新整理您的评论,以得到一个答案:I'll upvote.VBA没有Decimal
类型。如果你重构它,我肯定会升级投票。我想你需要找到升级投票两次的方法:(:-)。我还不太确定;请注意,这是VBA而不是VB。让我们将其设置为三次。。。(:-)+:-):哈。但请检查以下内容:。它似乎可以在Access VBA中使用,但不能在Excel VBA中使用。VBA没有Decimal
类型。如果你重构它,我肯定会升级投票。我想你需要找到升级投票两次的方法:(:-)。我还不太确定;请注意,这是VBA而不是VB。让我们将其设置为三次。。。(:-)+:-):哈。但请检查以下内容:。在Access VBA中似乎可以,但在Excel VBA中不可能。