如何将 Excel 公式转换为 UDF?
How to turn an Excel formula into a UDF?
我有一个公式可以在格式为 "Smith, John".
的单元格中交换姓氏和名字
=MID(A4&" "&A4,(FIND(" ",A4)+1),(LEN(A4)-1))
我创建了一个函数来利用此功能,一开始它似乎可以正常工作。函数为:
Function SwapNames(text As String) As String
SwapNames = Mid(text & " " & text, (Find(" ", text) - 1, (Len(text) - 1))
End Function
我将我的工作簿转换为加载项文件类型,以便我可以在全局范围内使用它,但现在它说查找函数未定义。我在这里做错了什么?
如@Nathan_Sav 所说 - 使用拆分,也许还有一个可选参数来标识分隔符。
所以 =swapnames("Bartrup-Cook Darren")
returns "Darren Bartrup-Cook" 和 =swapnames("Bartrup-Cook Darren","-")
returns "Cook Darren Bartrup" 如果分隔符不正确,则返回 #REF!
错误' 出现在字符串中。
Function SwapNames(text As String, Optional Delimiter As String = " ") As Variant
Dim SplitAt As Long
Dim NamePart As Variant
SplitAt = InStr(text, Delimiter)
If SplitAt = 0 Then
SwapNames = CVErr(xlErrRef)
Else
NamePart = Split(text, Delimiter)
SwapNames = NamePart(1) & " " & NamePart(0)
End If
End Function
这就是您如何使用 Split
函数和交换名称。
Function SwapNames(text As String) As String
SwapNames = Trim(Split(text, ",")(1)) & " " & Trim(Split(text, ",")(0))
End Function
所以它会将Smith, John
更改为John Smith
,将Smith, John J
更改为John J Smith
。
我有一个公式可以在格式为 "Smith, John".
的单元格中交换姓氏和名字=MID(A4&" "&A4,(FIND(" ",A4)+1),(LEN(A4)-1))
我创建了一个函数来利用此功能,一开始它似乎可以正常工作。函数为:
Function SwapNames(text As String) As String
SwapNames = Mid(text & " " & text, (Find(" ", text) - 1, (Len(text) - 1))
End Function
我将我的工作簿转换为加载项文件类型,以便我可以在全局范围内使用它,但现在它说查找函数未定义。我在这里做错了什么?
如@Nathan_Sav 所说 - 使用拆分,也许还有一个可选参数来标识分隔符。
所以 =swapnames("Bartrup-Cook Darren")
returns "Darren Bartrup-Cook" 和 =swapnames("Bartrup-Cook Darren","-")
returns "Cook Darren Bartrup" 如果分隔符不正确,则返回 #REF!
错误' 出现在字符串中。
Function SwapNames(text As String, Optional Delimiter As String = " ") As Variant
Dim SplitAt As Long
Dim NamePart As Variant
SplitAt = InStr(text, Delimiter)
If SplitAt = 0 Then
SwapNames = CVErr(xlErrRef)
Else
NamePart = Split(text, Delimiter)
SwapNames = NamePart(1) & " " & NamePart(0)
End If
End Function
这就是您如何使用 Split
函数和交换名称。
Function SwapNames(text As String) As String
SwapNames = Trim(Split(text, ",")(1)) & " " & Trim(Split(text, ",")(0))
End Function
所以它会将Smith, John
更改为John Smith
,将Smith, John J
更改为John J Smith
。