2017-02-08 24 views
2

名前の外に既存のデータの列がありますが、これには姓の接頭辞が含まれる場合もあります。それらのプレフィックスは複数の単語の中に存在することができます。私はすべての可能なプレフィックスのリストを持っていますが、私はプレフィックスと姓を分けて、データで2つのカラムを作る必要があります。姓の分割プレフィックスと姓(配列データに基づく)

=IF(
    RIGHT(A1;7) = " van de" 
; 
    RIGHT(A1;6) 
; 
    IF(
    RIGHT(A1;4) = " van" 
    ; 
    RIGHT(A1;3) 
    ; 
    IF(
     RIGHT(A1;3) = " de" 
    ; 
     RIGHT(A1;2) 
    ; 
     --Insert more nested If statements here-- 
    ) 
    ) 
) 

データは以下のようになります:

Name1 van de 
Name1 van 
Name1 
Name1 Name2 van 
Name1-Name2 Name3 van de 
Name1 Name2 Name3 

私が欲しいもの:

OriginalName | Name | Prefix 
-----------------|--------|---------- 
     a b  | a | b 
     a b c  | a | b c 
私は次のようにExcelの数式を書いていたんでした何

まず、これはかなり非効率的な方法ですが、私はこの公式の作成を自動化しました。とにかく今度は、Ifステートメントのネストされたステートメントに制限があり、その制限を超えなければならないことがわかりました。

この問題をどのように解決すればよいですか?

私は可能な接頭辞を持つ配列を持っています。多分これが助けになるでしょうか?

+0

すべてのプレフィックスを配列内(または範囲内)のループに格納し、その範囲内で操作を必要とする文字列を配列に渡し、if cell = array(i)then soemthingのようなchekcを実行します。 –

+0

セル内の式、またはマクロ内の式接頭辞と残りの名前の間には常にスペース文字がありますか?名前の「身体」は常に単一の単語ですか? – Werrf

+0

@DougCoatsこれは、すべての名前(約9000)に対して、〜20個のプレフィックスのうち1つが存在するかどうかをチェックする必要があることを意味します。これは本当に時間がかかるでしょうか? – Grafit

答えて

2

私はあなたの名前の残りの部分から「バン」と「デ」プレフィックスを分離したかった仮定をしました。私が誤解している場合、あなたの問題/質問のより多くの例を提供してください...

次のソリューションは、「プレフィックス」開始を決定するためにヘルパーの列が必要ですが、必要であれば、あなたはそれを隠すことができます。

enter image description here

まず、A8:A9van;)に私の値を入れ、prefixという名前をつけて次の式で参照できるようにします。C1

配列数式( + を入力Ctrlキー + Shiftキーを使用する)である:D1E1又は正常式中

=MIN(IF(ISNUMBER(SEARCH(prefix,A1)),SEARCH(prefix,A1))) 

式:

=IF(C1>0,LEFT(A1,C1-2),A1) 
=IF(C1>0,MID(A1,C1,LEN(A1)),"") 
+0

かなりうまく動作します。しかし、1つの質問。誰かの名前が「Name1 Demas Name3」である場合、数式は「Demas Name3」が接頭辞であると考えます。これを混ぜないようにする方法はありますか? – Grafit

+0

'prefix'配列の' de'値の最後にスペースを入れてください。次に、**配列式**を '= MIN(IF(ISNUMBER(SEARCH(接頭辞、A2&" ")、SEARCH(接頭辞、A2&" ")))に変更します。 ... _ああ_ ...**大文字と小文字を区別する**検索のための 'FIND'関数のための' SEARCH'関数を切り替えることもできます。ちょっと役立つでしょう... – reasra

+0

これはうまくいけました、ありがとう! – Grafit

2

最短に最長姓の順にリストを入れてください。私はE1:E3に私を入れました。姓を取得するために、次に

=TRIM(IFERROR(SUBSTITUTE(A1,INDEX($E$1:$E$3,MATCH(TRUE,ISNUMBER(SEARCH($E$1:$E$3,A1)),0)),""),A1)) 

次に、この配列数式を使用し

=IFERROR(INDEX($E$1:$E$3,MATCH(TRUE,ISNUMBER(SEARCH($E$1:$E$3,A1)),0)),"") 

は、彼らが出て行くときはCtrl-Shiftキーを押しながら入力する代わりに入力して確認する必要が配列数式ビーイング編集モード。正しく実行された場合、Excelは{}を数式の周りに置きます。

enter image description here

+0

この数式は大きな助けになります!間違いなく正しい方向に進んでいます。今私はまた別の列の接頭辞だけを望む。このような数式でこれを行うことはできますか? – Grafit

+0

もちろん、 'INDEX()'関数の部分を別の列に置き、Ctrl-Shift-Enterでそれを入力すると、SUBSTITUTE関数に姓が返されます。 –

+0

また、このサイトでは、回答を無効にしてダウン投票のために開くので、新しいリクエストで質問を変更するのは適切ではありません。あなたの質問をオリジナルに戻してください。上記の私のコメントがあなたの2番目のリクエストに答えることができない場合は、新しい質問をしてください。 @Grafit –

1

私はこれが既に答えられていることを知っていますが、私はこれを昨日行い、それを提出する時間がありませんでした(バスのために走らなければならなかった)。

すべてのプレフィックス値は、彼らの前にスペースを持っている...

enter image description here

列Bの式(配列数式 - Ctrlキー + Shiftキー + は、数式バーにを入力してください) =INDEX(SUBSTITUTE(A1,Prefix,""),MATCH(SMALL(LEN(SUBSTITUTE(A1,Prefix,"")),1),LEN(SUBSTITUTE(A1,Prefix,"")),0))

カラムC式 - =TRIM(SUBSTITUTE(A1,B1,""))

関連する問題