Excel 拆分前缀和姓氏(基于数组数据)
我有一列名外数据,可能包含姓氏前缀,也可能不包含姓氏前缀。这些前缀可以存在于多个单词中。我有一个所有可能前缀的列表,但现在我需要拆分前缀和姓氏,并用数据创建两列 我所做的是编写一个excel公式,如下所示:Excel 拆分前缀和姓氏(基于数组数据),excel,excel-formula,vba,Excel,Excel Formula,Vba,我有一列名外数据,可能包含姓氏前缀,也可能不包含姓氏前缀。这些前缀可以存在于多个单词中。我有一个所有可能前缀的列表,但现在我需要拆分前缀和姓氏,并用数据创建两列 我所做的是编写一个excel公式,如下所示: =IF( RIGHT(A1;7) = " van de" ; RIGHT(A1;6) ; IF( RIGHT(A1;4) = " van" ; RIGHT(A1;3) ; IF( RIGHT(A1;3) = " d
=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
姓氏数据如下所示:
=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
首先,这是一个非常低效的方法,但我自动创建了这个公式,所以这不再是一个问题。现在我发现嵌套的If语句有一个限制,我必须超过这个限制
我应该如何解决这个问题
我有一个带有可能前缀的数组。也许这会有帮助?把你的姓氏从最长的到最短的排序。我把我的放在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将在公式周围放置{}
我假设您希望将“van”和“de”前缀与名称的其余部分分开。如果我误解了,请提供更多您的问题的例子 以下解决方案需要一个helper列来确定“前缀”的起始位置,但如有必要,可以将其隐藏: 首先,将我的值放在
A8:A9
(van;de)的任意位置,并将其命名为前缀
,以便在以下公式中引用
C1
中的公式是一个数组公式(使用Ctrl+Shift+Enter):
D1
和E1
中的公式或普通公式:
=IF(C1>0,LEFT(A1,C1-2),A1)
=IF(C1>0,MID(A1,C1,LEN(A1)),"")
我知道这个问题已经得到了回答,但我昨天做了,没有时间提交(不得不赶公交车) 所有前缀值前面都有一个空格 B列公式(数组公式-Ctrl+Shift+Enter进入公式栏)
=索引(替换(A1,前缀“”),匹配(小(LEN(替换(A1,前缀“”),1),LEN(替换(A1,前缀“”),0))
列C公式-
=TRIM(替换为(A1,B1,”)
将所有前缀存储在一个数组(或一个范围)中,使用需要操作的字符串在所述范围内循环,并在数组中循环,并执行类似“if cell=array(i),则执行soemthing”的检查。您是在单元格内还是在宏中执行此操作?前缀和名称的其余部分之间是否始终存在空格字符?名字的“正文”总是一个单词吗?@DougCoats这意味着对于每个名字(大约9000个),它必须检查20个前缀中是否有一个,对吗?这不是很费时吗?@Werrf现在我正试图用细胞内的一个公式来做这件事。当有前缀时,总有一个空格。名称的正文可以是多个单词。@Grafit我敢打赌不会花那么长时间。Vba相当快,尤其是在阵列中工作时。我愿意打赌它需要4到5秒(如果在vba中完成,而不是工作表的事情)。这个公式是一个很大的帮助!这肯定是朝着正确的方向发展。现在,我只希望前缀在不同的列中。我可以用这样的公式来实现这一点吗?当然,只需将INDEX()
函数部分放在另一列中,并使用Ctrl-Shift-enter键输入,因为它会将姓氏返回给替换函数。此外,在该网站上,在获得答案后使用新请求更改问题是不合适的,因为它会使答案无效,并将其打开以进行向下投票。请把你的问题放回原处。如果我上面的评论没有回答你的第二个请求,请提出一个新问题@GrafitI尝试将INDEX()
部分的引用更改为具有我使用原始解决方案创建的结果的列。对于前缀来说效果很好,但是第4行现在返回craner
。我没有一个只提供所有姓氏的专栏。下次请确保您的所有要求都在一开始就存在@格拉菲特的作品相当不错。不过有一个问题。当某人的名字是Name1 Demas Name3
时,公式认为Demas Name3
是前缀。有没有办法确保它不会混淆这一点?在前缀
数组中的de
值的末尾加一个空格。然后将数组公式更改为=MIN(如果(ISNUMBER(SEARCH(prefix,A2&“”)),SEARCH(prefix,A2&“”))
。。。哦还可以将搜索
功能切换为查找
功能,以进行区分大小写的搜索。。。好吧,那只会有点帮助。。。