2017-01-31 6 views
0

私は、フォーマットが "Smith、John"であるセルでファーストネームで姓を入れ替える数式を持っています。Excel式をUDFに変換する方法は?

=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

私は世界的にこれを使用することができますので、私はアドインファイルタイプに自分のワークブックを変換し、今では検索機能が定義されていないと言います。私はここで間違って何をしていますか?

+0

また、Findパーツを範囲に変換しようとしましたが、 "#VALUE"を返すだけです。-----関数SwapLNFN(テキスト範囲として)As String = MID(A4& ""&A4、(FIND( " (Len(text)) - 1、(Len(text)) - テキストの範囲を指定します。 1)) 終了機能 ' – DukeSilver

+0

' WorksheetFunction.Find'を使用します。 – cyboashu

+1

あなたはinstrを使用する必要がありますが、split()を使用して多分 –

答えて

2

@Nathan_Savと同じように、区切り文字を識別するためにsplitとおそらくオプションの引数を使います。

区切り文字が文字列に存在しないのであれば=swapnames("Bartrup-Cook Darren")戻っ「ダレンBartrup・クック」と=swapnames("Bartrup-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 
+0

を達成することもできます。これは完全に動作します! – DukeSilver

+0

ちょうど私がコードを理解していることを確認するために、実際の作業は区切り文字を見つけたときに文字列を区切り、配列に配置するSplit(text、Delimiter)で行われます。区切り文字が文字列に表示されない場合、エラー処理のためにSplitAtがあるようです。あれは正しいですか?また、Split()は区切り文字をいつ削除しますか? Delimiter As String = "" 'をデリミタとしてカンマにすると、カンマが削除されます。ありがとうございました! – DukeSilver

+0

はい、 'SplitAt'は、分割しようとする前に、テキスト内の区切り文字が存在するかどうかをチェックするだけです。 'Split'を使うと、区切り文字の両側のテキストは配列の別々の要素に置かれ、区切り文字は取り除かれます。私はそれが実際に起こるかどうかは分かりません - それはすべて同じプロセスの一部です。 –

1

これはSplitの機能を使用して名前を入れ替える方法です。

Function SwapNames(text As String) As String 
    SwapNames = Trim(Split(text, ",")(1)) & " " & Trim(Split(text, ",")(0)) 
End Function 

だから、John J SmithJohn SmithSmith, John JSmith, Johnを変更します。

関連する問題