Vba 如何将Excel公式转换为自定义项?
我有一个公式,可以在格式为“Smith,John”的单元格中交换姓氏和名字 我创建了一个函数来利用这个功能,一开始它似乎可以工作。功能是:Vba 如何将Excel公式转换为自定义项?,vba,excel,user-defined-functions,udf,Vba,Excel,User Defined Functions,Udf,我有一个公式,可以在格式为“Smith,John”的单元格中交换姓氏和名字 我创建了一个函数来利用这个功能,一开始它似乎可以工作。功能是: 函数SwapNames(文本作为字符串)作为字符串 SwapNames=Mid(text&&&text,(Find(“,text)-1,(Len(text)-1)) 结束功能 我将工作簿转换为外接程序文件类型,以便全局使用它,现在它显示“查找”函数未定义。我在这里做错了什么?正如@Nathan_Sav所说-使用split,或者使用可选参数来标识分隔符 因此=
函数SwapNames(文本作为字符串)作为字符串
SwapNames=Mid(text&&&text,(Find(“,text)-1,(Len(text)-1))
结束功能
我将工作簿转换为外接程序文件类型,以便全局使用它,现在它显示“查找”函数未定义。我在这里做错了什么?正如@Nathan_Sav所说-使用split,或者使用可选参数来标识分隔符 因此
=swapnames(“Bartrup-Cook-Darren”)
返回“Darren-Bartrup-Cook”和=swapnames(“Bartrup-Cook-Darren”,“-”)
返回“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
正如@Nathan_Sav所说的-使用split,也许还有一个可选参数来标识分隔符 因此
=swapnames(“Bartrup-Cook-Darren”)
返回“Darren-Bartrup-Cook”和=swapnames(“Bartrup-Cook-Darren”,“-”)
返回“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
这就是如何使用函数和交换名称
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
,这就是使用函数和交换名称的方法
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
此外,我尝试将Find部分转换为一个范围,它只返回“#VALUE”--函数SwapLNFN(文本作为范围)作为字符串”=MID(A4&“(Find(“,A4)+1),(LEN(A4)-1))SwapLNFN=MID(text&&&text,Range(text)。Find(“,text)-1,(Len(text)-1)End函数
useWorksheetFunction.Find
。您需要使用instr,但也可以使用split()实现maybeal。因此,我尝试将Find部分转换为Range,它只返回“#VALUE”--函数SwapLNFN(text As Range)作为字符串”=MID(A4&“”&A4,(FIND(“,A4)+1,(LEN(A4)-1))SwapLNFN=Mid(text&“”&text,Range(text)。FIND(“,text)-1,(LEN(text)-1))结束函数
useWorksheetFunction.FIND
。您需要使用instr,但也可以使用split()来实现可能只是为了确保我理解代码,真正的工作是使用split(text,Delimiter)它在找到分隔符并将其放入数组时分隔字符串。如果分隔符未显示在字符串中,则SplitAt似乎可用于错误处理。是否正确?Split()何时删除分隔符?当我将分隔符更改为string=“”
要使用逗号作为分隔符,逗号将被删除。谢谢!是的,SplitAt
只是在尝试拆分文本之前检查文本中是否存在分隔符。当使用split
时,分隔符两侧的文本将被放入数组的单独元素中,分隔符将被删除。我不知道但是,当这真的发生时——这都是同一个过程的一部分。为了确保我理解代码,真正的工作是使用Split(文本,分隔符)它在找到分隔符并将其放入数组时分隔字符串。如果分隔符未显示在字符串中,则SplitAt似乎可用于错误处理。是否正确?Split()何时删除分隔符?当我将分隔符更改为string=“”
要使用逗号作为分隔符,逗号将被删除。谢谢!是的,SplitAt
只是在尝试拆分文本之前检查文本中是否存在分隔符。当使用split
时,分隔符两侧的文本将被放入数组的单独元素中,分隔符将被删除。我不知道然而,当这真的发生时——这都是同一个过程的一部分。