人事部同事发来一份表格,里面是员工花名册。她想交给IT部门为每个员工分配邮箱账号,规则是使用员工姓名拼音缩写。这就需要每个员工名字的拼音首字母。微软不是中国公司,自然也就没有提供这个功能。需要自己想办法解决。
方案一:通用版本(兼容性好)
考虑到有些低版本的Excel不支持数组溢出功能,所以用这个通用公式就能解决兼容性问题。
在目标单元格输入公式:
=CONCAT((LOOKUP(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1), {"","";"吖","A";"八","B";"攃","C";"咑","D";"妸","E";"发","F";"旮","G";"哈","H";"丌","J";"咔","K";"垃","L";"妈","M";"乸","N";"噢","O";"帊","P";"七","Q";"冄","R";"仨","S";"他","T";"屲","W";"夕","X";"丫","Y";"帀","Z"})))
方案二:支持数组溢出(效率高)
如果版本大于等于2021,则可以不用方案一那么 麻烦,需要用组合键生成带{}的数组公式。新版本本身就支持数组公式。使用了SEQUENCE(LEN(A2))来替代了ROW(INDIRECT("1:"&LEN(A2)))。更高效简洁。
在目标单元格输入公式:
=CONCAT(LOOKUP(MID(A2,SEQUENCE(LEN(A2)),1), {"","";"吖","A";"八","B";"攃","C";"咑","D";"妸","E";"发","F";"旮","G";"哈","H";"丌","J";"咔","K";"垃","L";"妈","M";"乸","N";"噢","O";"帊","P";"七","Q";"冄","R";"仨","S";"他","T";"屲","W";"夕","X";"丫","Y";"帀","Z"}))
原理说明:
先用mid函数将单元格内容拆分成单个字符。这里使用了len()函数计算字符长度,实现拆分字符动态化,避免固定数量拆分而可能造成的性能浪费。
再用lookup函数对拆分后的字符与后面的字符集进行模糊匹配。匹配到对应的字母。
最后用concat函数将返回的首字母拼接起来。
两个公式可以直接照搬,只要将公式中两个A2换成自己的单元格地址即可。
注意
注意:这个公式有一个问题无法解决,那就是多音字问题。“重”、“行”、“乐”、“长”等,就可能返回错误的字母。但这个是用公式解决不了的。
如果数据特别多,用这个两个公式可能会拖慢运行速度。更建议使用vba代码来实现,会快很多。
也可以分享给你的朋友。

夜雨聆风