从十进制值中区分句号

我正在研究一个检查单元格是否有“£”符号的公式,然后检查其后的值。 如果该值不是一个四舍五入的值,例如“£30”或“£30.00”,那将是一个错误。

我的问题是,文本在小数点后有句号。 这会导致返回“DECIMAL”值。 我怎么不算30英镑。 作为一个错误。

以下是通过VBAinput的公式

=IF(ISERROR(SEARCH(""."",LEFT((RIGHT(RC[-2],LEN(RC[-2])-SEARCH(""£"",RC[-2]))),SEARCH("" "",(RIGHT(RC[-2],LEN(RC[-2])-SEARCH(""£"",RC[-2])))))))=FALSE,IF(ISERROR(SEARCH("".00"",LEFT((RIGHT(RC[-2],LEN(RC[-2])-SEARCH(""£"",RC[-2]))),SEARCH("" "",(RIGHT(RC[-2],LEN(RC[-2])-SEARCH(""£"",RC[-2])))))))=FALSE,"""",""DECIMAL""),"""") 

这是用户定义的function,应该做你想做的。 它会查找以€货币符号开头的子string,然后是一些数字。 如果下面有一个点,它会查看点和接下来的两个数字(如果没有数字,则为空)。 如果该序列的值为零,则函数返回TRUE ,否则返回FALSE

显然,你可以修改这个来返回你想要的,或者在工作表中的一个IF公式中使用它。

请注意,它只适用于string,而不适用于格式为货币的值。


 Option Explicit Function ValidCurrency(S As String) As Boolean Dim RE As Object, MC As Object Const sPattern As String = "€\s*\d+(\.\d{2})?" ValidCurrency = False Set RE = CreateObject("vbscript.regexp") With RE .Pattern = sPattern If .test(S) = True Then Set MC = .Execute(S) ValidCurrency = (MC(0).submatches(0) = 0) End If End With End Function 

在这里输入图像说明

假设你想检查的string是在F1 ,我想你可以做这样的事情:

 =IF(ISNUMBER(FIND("£",F1)),IF(TRIM(MID(F1&"00",FIND("£",F1)+1,5))="30.00",TRUE,FALSE),FALSE) 

这个:

  1. 假设您要检查的£数字是该string中“£”字符的首次出现。
  2. 假定发生“£30”。 将会在句子结尾出现,就像你在上面的评论中声明的那样。

但是,也许你遗漏了一些不能工作的例子。


对于您的后续问题,以下内容适用于所有两位数的整数值(10到99)。 请注意,我将string中的值与其ROUND() ed值进行比较,以查看两者是否匹配,从而确保小数点后面没有任何内容。 如果你需要覆盖更广泛的价值观,这应该足以让你自己进一步调整,但在这一点上,我想我已经回答了你的原始问题,然后是一些。

 =IF(ISNUMBER(FIND("£",F1)),IF(VALUE(TRIM(MID(F1&"00",FIND("£",F1)+1,5)))=ROUND(VALUE(TRIM(MID(F1&"00",FIND("£",F1)+1,5))),0),TRUE,FALSE),FALSE)