web-dev-qa-db-ja.com

セルから最後の部分文字列を抽出します

列に名前があります。その列の姓だけを別の列に分割する必要があります。

姓は、右側からスペースで区切られます。

セルA2 = Alistair Stevensの内容とセルB2に数式を入力しました(セル'Stevens'B2が必要です)

次の式を使用してみました。

=RIGHT(A2,FIND(" ",A2,1)-1)

=RIGHT(A2,FIND(" ",A2))

これらの式は両方ともworkこのセルでは使用できますが、下のセルに入力/コピー&ペーストすると機能しません。間違った値を取得します!!

A3 -> David Mckenzie

B3 -> Mckenzie

ミドルネームがある場合でも、これは機能します:

_=MID(A2,FIND(CHAR(1),SUBSTITUTE(A2," ",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,LEN(A2))
_

すべてが姓である場合は、 this answer を確認してください。

名前の末尾にスペースが含まれている場合は、上記の式で_A2_のすべてのインスタンスをTRIM(A2)に置き換えて削除することができます。

最初の式=RIGHT(A2,FIND(" ",A2,1)-1)が_Alistair Stevens_に対して機能するのは、たまたま偶然であることに注意してください。これは、_"Alistair"_と_" Stevens"_に同じ文字数が含まれているためです(_" Stevens"_の先頭のスペースを数える場合)。

@Jeanが提供する答えは、実用的ですがあいまいなソリューションを提供します(ただし、末尾のスペースは処理しません)

別の方法として、vbaユーザー定義関数(UDF)を検討してください。

_Function RightWord(r As Range) As Variant
    Dim s As String
    s = Trim(r.Value)
    RightWord = Mid(s, InStrRev(s, " ") + 1)
End Function
_

シートで使用する
=RightWord(A2)

4
chris neilsen

テキストの最後から2番目のWordを取得する場合は、このマクロをスプレッドシートの関数として使用できます。

Public Function Get2ndText(S As String) As String

Dim sArr() As String
Dim i As Integer
sArr = Split(S, " ")

'get the next to the last string
i = UBound(sArr) - 1
Get2ndText = sArr(i)

End Function

次に、スプ​​レッドシートB1にテキストとして:

CURRENT OWNER 915 BROADWAY ST HOUSTON TX 77012-2126

b2では、式は次のようになります。

=Get2ndText(B1)

結果は

TX
1
Kerry White

Excelでこの機能を試してください。

Public Shared Function SPLITTEXT(Text As String, SplitAt As String, ReturnZeroBasedIndex As Integer) As String
        Dim s() As String = Split(Text, SplitAt)
        If ReturnZeroBasedIndex <= s.Count - 1 Then
            Return s(ReturnZeroBasedIndex)
        Else
            Return ""
        End If
    End Function

次のように使用します。

名(A1)|姓(A2)

セルA1の値= Michael Zomparelli

A2列に姓が必要です。

=SPLITTEXT(A1, " ", 1)

最後のパラメータは、返されるゼロベースのインデックスです。したがって、スペース文字で分割すると、インデックス0 = Michaelおよびインデックス1 = Zomparelli

上記の関数は.Net関数ですが、VBAに簡単に変換できます。

0
Michael Z.
Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)")))))

これを試して。それがうまくいくことを願っています。

0
Al Jebr

より単純なものは次のとおりです:=TRIM(RIGHT(SUBSTITUTE(TRIM(A2)," ",REPT(" ",99)),99))

データに不要なスペースが含まれていないことが確実な場合は、TRIM(A2)の代わりにA2を使用できます。

Rick Rothsteinによって説明された概念に基づく: http://www.excelfox.com/forum/showthread.php/333-Get-Field-from-Delimited-Text-String

ネクロポスタでごめんなさい!

0