分割前缀和姓(基于数组数据)

我有一列数据存在于名称之外,可能包含也可能不包含姓氏前缀。 这些前缀可以存在于多个单词之外。 我有一个所有可能的前缀列表,但现在我需要拆分前缀和姓氏,并与数据2列。

我所做的是写一个如下的Excel公式:

=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 -----------------|--------|---------- ab | a | b abc | a | bc 

首先,这是一个相当低效的方法,但是我自动创build了这个公式,所以这不再是一个问题。 现在我发现了嵌套的If语句是有限制的,我必须超过这个限制。

我应该如何解决这个问题?

我有一个可能的前缀数组。 也许这会帮助?

我做了一个假设,你想从名字的其余部分分开“范”和“德”的前缀 。 如果我误解了,请提供更多您的问题/问题的例子…

以下解决scheme需要助手列来确定“前缀”的起始位置,但是如果需要,您可以将其隐藏起来:

在这里输入图像说明

首先,将我的值放在A8:A9van; de )的任意位置,并将其命名为prefix以便在以下公式中引用它。

C1中的公式是一个数组公式 (使用Ctrl + Shift + Enter ):

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

D1E1公式或正常公式:

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

把你的名单按照最长的姓氏到最短的顺序 。 我把它放在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-Enter而不是Enter来确认。 如果正确完成,则Excel将在公式周围放置{}

在这里输入图像说明

我知道这已经回答了,但我昨天做了这个,没有时间提交它(不得不跑巴士)。

所有Prefix值在它们之前有一个空格…

在这里输入图像描述

B列公式(公式栏中的数组公式 – Ctrl + Shift + Enter=INDEX(SUBSTITUTE(A1,Prefix,""),MATCH(SMALL(LEN(SUBSTITUTE(A1,Prefix,"")),1),LEN(SUBSTITUTE(A1,Prefix,"")),0))

C列公式 – =TRIM(SUBSTITUTE(A1,B1,""))