我正在创建一个类似VBA的表达式。
Replace([EmailAddress], "@domain.com", , , "", , )
[EmailAddress]
实际上是由一个字符串组成,例如 "[email protected]"。所以从表达式中产生的结果将是 "john.doe"
我想设置一个条件,如果表达式返回的结果超过20个字符,则返回的结果将是 "john.d"。
基本上是把符号""之后的第一个字符后面的所有字符去掉。
这个想法是这样的。
Variable a = Replace([EmailAddress], "@domain.com", , , "", , )
If len(a) > 20 then
an expression that remove all the characters after the symbol "." and first letter
else
a
End if
我不知道我说的是否有道理,因为我不是一个程序员 也不知道这些VBA语法是否正确。我想应该有一个单行表达式来容纳所有这些条件。
如果有人能帮助指导我,真的很感激。
下面是一个简短的VBA函数,接受一个电子邮件地址。如果其中有一个"@",它就会得到它左边的文本。如果这个文本长于20个字符,并且里面有一个".",那么得到". "左边的所有文本,加上". "和下一个字符。
Function fRemoveDomain(strDomain As String) As String
If InStr(strDomain, "@") > 0 Then
fRemoveDomain = Left(strDomain, InStr(strDomain, "@") - 1)
If (Len(fRemoveDomain) > 20) And (InStr(fRemoveDomain, ".") > 0) Then
fRemoveDomain = Left(fRemoveDomain, InStr(fRemoveDomain, ".") + 1)
End If
End If
End Function
请注意。
这个UDF应该可以做到,假设你的邮件输入的是 始终 遵循这样的格式:括号中的所有内容可以是一个不包含以下内容的字符串 @
或 .
:
[name].[name]@[domain].com
Public Function DOMAIN(Target As String) As String
If Len(Split(Target, "@")(0)) > 20 Then
Domain = Split(Target, ".")(0) & "." & Left(Split(Target, ".")(1), 1)
Else
Domain = Split(Target, "@")(0)
End If
End Function
你也可以通过以下方式避免使用VBA
=IF(LEN(MID(A2,1,SEARCH("@",A2)-1))>20,MID(A2,1,FIND(".",A2)+1),MID(A2,1,SEARCH("@",A2)-1))