带有If-else条件的单行VBA语句表达式。

问题描述 投票:0回答:2

我正在创建一个类似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 syntax
2个回答
0
投票

下面是一个简短的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

请注意。


0
投票

这个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

你可以直接在工作表上调用UDF,比如这样。

enter image description here

或者从一个宏中调用,像这样。

enter image description here



你也可以通过以下方式避免使用VBA

=IF(LEN(MID(A2,1,SEARCH("@",A2)-1))>20,MID(A2,1,FIND(".",A2)+1),MID(A2,1,SEARCH("@",A2)-1))
© www.soinside.com 2019 - 2024. All rights reserved.