区分句号与小数值

时间:2017-03-06 17:09:51

标签: excel excel-vba excel-formula vba

我正在研究一个检查单元格是否为“£”符号的公式,然后检查它后面的值。如果该值不是舍入值,例如“30英镑”或“30英镑”,这将是一个错误。

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

以下是通过VBA输入的公式

=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""),"""")

2 个答案:

答案 0 :(得分:1)

假设您要检查的字符串位于F1,我认为您可以执行以下操作:

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

这:

  1. 假设您要检查的£号码是字符串中第一次出现“£”字符。
  2. 假设出现“30英镑”。正如你在上面的评论中断言的那样,会发生在句子的结尾处。
  3. 但也许您遗漏了一些不起作用的例子。

    对于您的后续问题,以下内容适用于所有两位数的整数值(10到99)。请注意,我正在将字符串中的值与其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)
    

答案 1 :(得分:1)

这是一个用户定义的功能,应该做你想要的。它查找以欧元货币符号开头的子字符串,然后查找一些数字。如果后面有一个点,则会查看点和后两位数字(如果没有数字则不显示)。如果该序列的值为零,则函数返回TRUE,否则返回FALSE

显然,你可以修改它以返回你想要的任何内容,或者在工作表的IF公式中使用它。

请注意,它仅适用于字符串,而不适用于格式化为货币的值。

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

enter image description here