我正在研究一个检查单元格是否为“£”符号的公式,然后检查它后面的值。如果该值不是舍入值,例如“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""),"""")
答案 0 :(得分:1)
假设您要检查的字符串位于F1
,我认为您可以执行以下操作:
=IF(ISNUMBER(FIND("£",F1)),IF(TRIM(MID(F1&"00",FIND("£",F1)+1,5))="30.00",TRUE,FALSE),FALSE)
这:
£
号码是字符串中第一次出现“£”字符。但也许您遗漏了一些不起作用的例子。
对于您的后续问题,以下内容适用于所有两位数的整数值(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