名の最初の2文字と姓の最初の2文字を組み合わせる


9

ユーザー名のスプレッドシートがあります。

姓と名はcolumnの同じセルにありますA

名の最初の2文字(最初の単語)と姓の最初の2文字(2番目の単語)を連結する数式はありますか?

例えばにJohn DoeなるべきJoDoです。

私は試した

=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))

しかし、これはJoDoe結果として私に与えます。


2
エッセンシャルリーディング:名前について虚偽のプログラマーが信じる
StackOverthrow

答えのどれかがトリックをしますか?(もしそうなら、投稿の左にあるチェックマークをクリックして、回答としてフラグを立ててください。)
BruceWayne

回答:


15

はい; それぞれの人が名と姓しか持っていないと仮定すると、これは常にスペースで区切られ、以下を使用できます:

=LEFT(A1,2)&MID(A1,SEARCH(" ",A1)+1,2)

あなたが提供したのはそれだけなので、私はこれらの仮定に基づいてこの答えを立てることができました。

または、スペースを含めたい場合は、次のようにします。

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)

2
@prweqいいえ問題ありません。問題がなければ、正しいものとして受け入れます
PeterH

最も簡単で理解しやすいソリューション。(まあ、;-)のFIND()代わりに使用することを除いてSEARCH())常にスペース区切りがあると想定しているので、2番目の式は次のように簡略化できます=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS

4
@RajeshS知ってる。それが私の答えが始まる理由ですassuming each person only has a First and Last name
PeterH 2018


1
私はTRIM(LEFT(A1,2))彼らの名が1文字しかない場合に備えて提案しますが、これらの特殊なケースを手動で確認するのも簡単です。
エンジニアトースト2018

11

まとめると、ここでは、名の最初の2文字と姓の最初の2文字を返すだけでなく、ミドルネームも考慮するソリューションを示します。

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)

ここに画像の説明を入力してください

式の主要部分@Kyleにありがとう


1
あなたは私をそれに打ち負かしました;-)(それは真夜中過ぎだったので私は寝る必要があります-後でこれを私の答えに追加することを計画していました。)数式のわずかな改善~は4ではなく1を使用することです。Tildaが名前(!)の一部として使用されている可能性がある、または誤って入力されている可能性がある場合は、キーボードに表示されない文字を使用してください。使用したい§別の良いものです。
robinCTS

@BruceWayneは,,あなたの式は☺ミドルネームを無視し、それが唯一のFirts&姓にアクセスしていますので、,,,アップが投票し,,,より有能である
ラジェッシュS

@RajeshS 元F1ドライバーのFernando AlonsoDíazのように、姓が1つ、姓が2つあり、ミドルネームがないスペイン人の名前はどうですか?(またはフェリペファンファンパブロアルフォンソ
デトドス


1
@robinCTS-よかった!私は別の答え(編集済み)から式を取得しましたが、あまり深く掘り下げていませんでした。ヒントをありがとう!
BruceWayne

9

これは別の方法です...

ワークシートのスクリーンショット

  • 名前
  • B- =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))

さらに追加して、これらの余分な列をすべてマージして削除することもできます=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH

ええ、私は数分後にそれをやった!
18

ええ、私はあなたが答えを編集したことに気づきました、Nice Answer!
PeterH 2018

5

まず、PeterHの答えが最も簡単で理解しやすいと思います。(私の好みは-のFIND()代わりに使用することですが、SEARCH()2つの少ない文字を入力するとRSIを回避するのに役立ちます;-))

どちらの用途があることの代替答えMID()LEFT()でもRIGHT()、その代わりに使用してREPLACE()、次のように名前の不要な部分を削除するには、次のとおりです。

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")

説明:

インナーREPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")は姓の3文字目以降の文字を削除し、アウターは名の3文字目からスペースまでの文字を削除します。REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


補遺1:

上記の式は、単一のミドルネームを許可するように調整することもできます。

=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")

と置き換えることFIND(" ",A1)によりIFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1))

FIND(" ", A1, FIND(" ",A1)+1)(最初のスペースの後にスペースの検索を開始することによって)2番目のスペースを見つけるか、それ以外の場合はエラーを見つけます。2番目のスペースがない場合は、最初のスペースを検索します。
IFERROR(find_second_space, FIND(" ",A1))


この(長い)バージョンでは、ミドルネームをいくつでも使用できます。

=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")

この場合FIND(" ",A1)はに置き換えられFIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))ます。

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))スペースの数を数えます。最後のスペースをに置き換えます。最後のスペースを見つけることと同じである最初を見つけます。
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

§もちろん、完全な名前の文字列に存在しないことが保証されている任意の文字に置き換えることができます。より一般的で安全な代替手段は、を使用することCHAR(1)です。)


もちろん、BruceWayneの答えは、ミドルネームをいくつでも許可する最も簡単で理解しやすい解決策であることに注意してください。まあそうだった。私が他の答えを投稿するまで、それは;-)


補遺2:

すべてのソリューションは、次のIFERROR()ような関数内でそれらをラップすることにより、単一の名前のみのケース(4文字の結果が必要な場合)に対応するように適合させることができます。

=IFERROR(solution, alternate_formula)

上記は一般的なケースの式であり、特定のソリューションをより効率的に修正できる可能性があることに注意してください。たとえば、単一の名前の場合の要件が最初の2文字と最後の2文字を結合することである場合、PeterHの回答は次のようにしてより効率的に適応できます。

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)


1文字のファーストネームまたはイニシャル(大文字またはスペースまたはドットが2番目の文字として受け入れられないと想定)のケースを考慮に入れるために、以下を任意のソリューションで使用できます。

=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))

単一の文字は、ハードコーディングすることも、名前から計算することもできます。(または""、スペースまたはドットを削除するために使用します。)


最後に、フルネームが1文字のみ(!)である場合に本当に対応する必要がある場合は、単一名のみの式を別ので ラップしIFERROR()ます。(もちろん、代替式はその特殊なケースを処理しないと仮定します。)


補遺3:

最後に、最後に(いいえ、本当に* ;-))複数の連続するスペース、および/または先頭/末尾のスペースに対応するTRIM(A1)には、の代わりにを使用しますA1


*読者のために、T氏のように1文字の姓の場合はそのままにしておきます。

ヒント: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")


1
いつものように、あなたの答えはExcelの上級ユーザーガイドからのようです!以前に投稿した場合、これが投票結果の上位の回答になります。
PeterH 2018

@PeterH補完してくれてありがとう。質問がHot Network Questionsリストにヒットしたときに偶然見つけたので、パーティーには少し遅れました;-)
robinCTS

2

この回答に基づいて、ここに任意の数のミドルネームで機能するエレガントなソリューションがあります:

=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)

説明:

SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))単語間のスペースを、文字列全体の長さと同じ数のスペースに置き換えます。任意の大きな数値ではなく文字列の長さを使用すると、式がどのような長さの文字列でも機能することが保証され、効率的に機能します。

RIGHT(space_expanded_string, LEN(A1))一連のスペースが前に付いた右端の単語を抽出します。*

TRIM(space_prepended_rightmost_word) 右端の単語を抽出します。

LEFT(rightmost_word, 2) 右端の単語(姓)の最初の2文字を抽出します。


*警告:ユーザ名は末尾にスペースが含まれてすることが可能なら、あなたは最初の引数交換する必要があるSUBSTITUTE()。すなわち、A1で、TRIM(A1)。先頭のスペースと単語間の連続する複数のスペースは、だけで正しく処理されA1ます。


あなたの試みを修正する

あなたが試みた解決策を詳しく見てみると、最初の単語の最初の2文字(つまり名)と2番目の単語の最初の2文字が存在する場合はそれを連結するための実用的な数式に非常に近かったようです。

ユーザー名にミドルネームが含まれている場合、修正された式は、姓ではなく最初のミドルネームから最初の2文字を誤って取得することに注意してください(意図が姓から抽出することを前提としています)。

また、すべてのユーザー名が名、または名と姓のいずれかのみで構成されている場合、式は不必要に複雑になり、簡略化できます。


式がどのように機能するかを確認して修正するには、次のように整えれば簡単です。

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  IFERROR(
    FIND(" ", SUBSTITUTE(A1," ","",1)),
    LEN(A1)
  )
  - IFERROR(FIND(" ",A1), LEN(A1))
)


それがどのように機能するかを理解するには、まずA1スペースが含まれていない場合(つまり、単一の名前のみが含まれている場合)に何が起こるかを見てください。検索文字列がターゲット文字列で見つからない場合はエラーを返すIFERROR()ため、すべての関数は2番目の引数に評価されます。FIND()#VALUE!

=
LEFT(A1,2) &
MID(
  A1,
  LEN(A1) + 1,
  LEN(A1)
  -LEN(A1)
)

の3番目の引数はMID()ゼロに評価されるため、関数が出力""し、式の結果は単一の名前の最初の2文字になります。


次に、名前がちょうど2つある(つまり、スペースが1つある)場合を見てください。最初と3番目のIFERROR()関数は最初の引数を評価しますが、2 番目の関数は最初の引数FIND(" ", SUBSTITUTE(A1," ","",1))を削除した後で別のスペースを見つけようとしているため、2番目の引数を評価します。

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  LEN(A1)
  - FIND(" ",A1)
)

明らかにMID()、2番目の単語(つまり姓)全体を返します。式の結果は、名の最初の2文字とそれに続く姓のすべての文字になります。


完全を期すために、少なくとも3つの名前がある場合についても見ていきますが、式を修正する方法はかなり明白になっているはずです。今回は、すべてのIFERROR()関数が最初の引数に評価されます。

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  FIND(" ", SUBSTITUTE(A1," ","",1))
  - FIND(" ",A1)
)

前の例よりも少しわかりにくいMID()ですが、2番目の単語全体(つまり、最初のミドルネーム)を正確に返します。したがって、式の結果は、名の最初の2文字に続いて最初のミドルネームのすべての文字になります。


明らかに、修正はLEFT()MID()出力の最初の2文字を取得するために使用することです。

=
LEFT(A1,2) &
LEFT(
  MID(
    A1,
    IFERROR(FIND(" ",A1), LEN(A1)) + 1,
    IFERROR(
      FIND(" ", SUBSTITUTE(A1," ","",1)),
      LEN(A1)
    )
    - IFERROR(FIND(" ",A1), LEN(A1))
  ),
  2
)


上で述べた単純化は、次のものに置き換えるLEFT(MID(…,…,…), 2)ことMID(…,…,2)です:

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  2
)

または1行で:

=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)

これは基本的に、単一の名前でも機能するように変更されたPeterHのソリューションです(この場合、結果は名前の最初の2文字だけです)。


注:事前に入力された数式は、実際に入力すると機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.