web-dev-qa-db-ja.com

名前を分割して姓名を取得するにはどうすればよいですか?

名前のリストを含む列があります。他の2つの列に、姓名を抽出する関数を含める必要があります。これまでのところ私はこれを持っています

FirstName: =LEFT(D3,FIND(" ",D3))
LastName: =RIGHT(D3,LEN(D3)-FIND(" ",D3))

これは「FirstLast」形式の名前では機能しますが、「Mr。FirstLast」などの追加情報がある場合は機能しません。

これについて行くより良い方法はありますか?

1
Bob

タイトルや接尾辞などを無視しても、絶対に確実な方法はありません。次の2つの名前を検討してください。

エドワードヴァンヘイレン
デイヴィッド・リー・ロス

姓は「VanHalen」と「Roth」ですが、違いをアルゴリズムで区別する方法はありません。

7
Graeme Perrow

おそらくStackOverflowに最適ですが、一般的に簡単な方法はありません。アルゴリズムを改善するために、許可されるプレフィックスとサフィックスのリストを作成できます。しかし、考えてみてください...

Dr. Jack Johnson Smith, PhD
Mr. Jim S. Van De Berg, Jr.

...スペースだけで分割しても、完全に正しくなることはありません。

7
JP Alioto

また、異なる文化について考えてみてください。

オランダ語のほんの一例です。フルネーム「JohannesErnestusMaria van den Brink」は、ファーストネーム「Johannes」、ミドルネーム「Ernestus Maria」、ラストネーム「van denBrink」に分割されます(Bでソートする必要があります)。

最善の解決策(100%しか機能しない場合など)は、個別の名前フィールドと、ユーザーが適切なフィールドに適切な部分を入力できるインポートメソッドを用意することです。

とても幸運...

3
peSHIr

また、姓または名が多い名前でも失敗します。本当に別々に保管する必要があります。また、入力フォームをタイトル、名、姓などの特定の部分に分割する必要があります。このようにして、可能なスペースを正しく処理できます。

シートを「名」などの列で拡張し、できるだけ多くの名前を自動的に変換してから、結果を調べて、必要に応じて手動で修正を適用する必要があります。この作業の後、データははるかに使いやすく、拡張しやすくなります。

1
bandi

Microsoft Outlookには、このためのかなり優れたアルゴリズムがあります。 Outlookを自動化することはできますが、パフォーマンスに確実に影響があります。

http://www.dailydoseofexcel.com/archives/2004/11/11/parse-names-with-Outlook/

0
dkusleika

私も同じ問題を抱えていました。人の名前がいくつあっても、別々のフィールドに簡単に入れることができます。すべての名前をExcelからメモ帳にコピーしました。次に、そのテキストファイルをExcelにインポートし、インポート中に区切りオプションを選択してから、区切りスペースを選択しました。

より良い結果を得るには、イニシャル(faisalなど)を削除してデータをクリーンアップできます。タヒルはそれをフェイサルタヒルに変更します。

これで、テキストファイルをスペース区切りでExcelにインポートすると、すべての名前(1番目、2番目、3番目、4番目、5番目)が自動的に異なる列に配置されます。

0
Faisal

(Mr. Mrs. Dr. Mrs. Missなど)の値を何も置き換えずに、そのように名前を分割してみてください。テストを試して、セル内のスペースの数を確認し、「最初の最後」だけではないかどうかを確認します。その場合は、上記の値を何も置き換えないでください。それでも複数のスペースが含まれている場合は、カンマを確認し、カンマから最後まですべてを削除します。それは細胞をきれいにするのを助けるべきです。

-JFV

0
JFV

もう1つのオプションは、名前列を論理部分に分割することです。

SalutationFirst nameLast nameのように言います。このようにして、オプションでSalutationを使用して、3つの列から名前を作成できます。必要に応じて、Middle initialもスローします。

この特定のケースでは、分解しようとするよりもパーツから構築する方が簡単です。

0
random