Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA十进制前后的计数_Vba_Excel - Fatal编程技术网

Excel VBA十进制前后的计数

Excel VBA十进制前后的计数,vba,excel,Vba,Excel,我在数小数点前后的数字 例如,1452.13之前为4,之后为2 该值存储在一个字符串中,我想我可能需要将len与find一起使用,但无法找到它 非常感谢您的帮助 =LEN(LEFT(A1;LEN(A1)-FIND(".";A1))-1) =LEN(RIGHT(A1;LEN(A1)-FIND(".";A1))) 也就是说,如果十进制字符是点。有很多方法。乙二醇 这是一种快速查找小数点后数字的技术 可以复制和修改它以查找小数点之前的位置 Function CountDecimalPlaces(aN

我在数小数点前后的数字

例如,1452.13之前为4,之后为2

该值存储在一个字符串中,我想我可能需要将len与find一起使用,但无法找到它

非常感谢您的帮助

=LEN(LEFT(A1;LEN(A1)-FIND(".";A1))-1)
=LEN(RIGHT(A1;LEN(A1)-FIND(".";A1)))

也就是说,如果十进制字符是点。

有很多方法。乙二醇

这是一种快速查找小数点后数字的技术

可以复制和修改它以查找小数点之前的位置

Function CountDecimalPlaces(aNumber As Double) As Long

    Dim len1 As Long, len2 As Long
    len1 = Len(CStr(aNumber))
    len2 = Len(CStr(Int(aNumber)))
    CountDecimalPlaces = len1 - len2 + CLng(len1 <> len2)

End Function


Function CountInteger(aNumber As Double) As Long

    CountInteger = Len(CStr(Int(aNumber)))

End Function
函数CountDecimalPlaces(一个数字为双精度)的长度
调暗透镜1的长度与透镜2的长度相同
len1=Len(CStr(数量))
len2=Len(CStr(Int(aNumber)))
CountDecimalPlaces=len1-len2+CLng(len1-len2)
端函数
函数CountInteger(一个数字为双精度)的长度为
CountInteger=Len(CStr(Int(aNumber)))
端函数

以上两项都不依赖于十进制字符是“.”

使用excel公式,最好使用以下(快速)公式

我也可以玩吗D

Num = 1452.13
Debug.Print Len(Split(Num, ".")(0)) '<~~ Length of number before decimal
Debug.Print Len(Split(Num, ".")(1)) '<~~ Length of number After decimal   
Num=1452.13

Debug.Print Len(Split(Num,“.”(0))”如果您正在使用Microsoft Word:

Sub dot()

Dim Num As Variant
Num = 1452.13
MsgBox "You number: " & Num
MsgBox "Length of number before decimal: " & Len(Split(Num, ".")(0))
MsgBox "Length of number After decimal: " & Len(Split(Num, ".")(1))

End Sub

基于Siddharth Rout回答

欢迎使用堆栈溢出!你试图解决这个问题了吗?如果您有,请编辑您的问题,包括您的代码和研究,以显示哪些不适合您。如果没有,您应该先尝试自己解决它,然后在这里发布代码和研究。这也让别人更容易回答你的问题<代码> LeN(拆分(num &),“.]”(1))< /代码>对不起,我不明白你想说什么。考虑<代码> num=1452 < /COD>,添加点连接使代码失效。我明白你的意思:D,我假设OP总是通过小数。否则我会使用INSTR:D,但这是一个很好的观点@哈维夫伦奇:这就是奥梅内佩斯所说的,我确实对这一评论做出了回应。然而,为了避免任何混乱,我已经更新了帖子:)++用于多种解决方案!(我认为(减)
CLng(len1 len2)
应该是+
CLng(len1 len2)
)我知道-非常聪明,但是在执行过程中对
CLng(len1 len2)
进行评估时会得到什么?(我得到一个-1)我有一个十进制分隔符,两个都返回2(对于A1中的1452.13)=LEN(INT(A1))和=LEN(A1-INT(A1))-2可能更好;如果你想让代码真正万无一失(看看@Siddharth Rout的编辑),那么就使用与常用的点分隔符“.”不同的本地十进制设置(中欧使用的逗号,例如德国或奥地利)。顺便说一句,这是VBA代码,不仅对MS Word有效。您在@T.M.是正确的。区别在于“Debug.Print”Siddrath没有提到结果在Imrmediate窗口中。如果一个人是初学者,在观看比赛结果时可能会遇到问题。我很想知道你的意见。你愿意帮忙是可以的,但我认为即使是初学者也可以看看MS帮助网站,如果他不知道
Debug.Print
的含义的话。IMO这一补充与问题本身或澄清的迫切需要无关:-)
Num = 1452

Debug.Print Len(Split(Num, ".")(0)) '<~~ Length of number before decimal

If InStr(1, Num, ".") Then Debug.Print Len(Split(Num, ".")(1)) _
Else Debug.Print 0 '<~~ Length of number After decimal
Sub dot()

Dim Num As Variant
Num = 1452.13
MsgBox "You number: " & Num
MsgBox "Length of number before decimal: " & Len(Split(Num, ".")(0))
MsgBox "Length of number After decimal: " & Len(Split(Num, ".")(1))

End Sub