分割前缀和姓(基于数组数据)
我有一列数据存在于名称之外,可能包含也可能不包含姓氏前缀。 这些前缀可以存在于多个单词之外。 我有一个所有可能的前缀列表,但现在我需要拆分前缀和姓氏,并与数据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:A9
( van; de )的任意位置,并将其命名为prefix
以便在以下公式中引用它。
C1
中的公式是一个数组公式 (使用Ctrl + Shift + Enter ):
=MIN(IF(ISNUMBER(SEARCH(prefix,A1)),SEARCH(prefix,A1)))
D1
和E1
公式或正常公式:
=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,""))