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

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

ユーザー名のスプレッドシートを持っています。

名と姓は列の同じセルにあります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結果として私に与えられます。

答え1

はい。各人が名と姓のみを持ち、これが常にスペースで区切られていると仮定すると、以下を使用できます。

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

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

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

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

答え2

最後に、名前の最初の2文字と姓の最初の2文字を返すソリューションを紹介します。しかしミドルネームも考慮します。

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

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

感謝@Kyle 式の主要部分

答え3

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

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

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

答え4

に基づくこの答えミドルネームがいくつあっても機能するエレガントなソリューションを次に示します。

=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))
)


動作を理解するには、まず にスペースが含まれていない場合 (つまり、名前が 1 つだけ含まれている場合) に何が起こるかを確認します。検索文字列がターゲット文字列に見つからない場合はエラーが返されるため、すべての関数は 2 番目の引数を評価しますA1IFERROR()FIND()#VALUE!

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

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


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

=
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()の最初の 2 文字を取得するために使用することですMID()

=
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 文字のみになります)。


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

関連情報