Office 365中如何用高效公式将变音字符替换为普通字母?
Office 365无插件/VBA变音字符转普通字母方案(Lambda版)
需求说明
要把带变音符号的字母转换成普通字母,示例:
- áàȧäǎāãåąⱥấầắằǡǻǟẫẵảȁȃẩẳạḁậặăâ → a
- ḃƀɓḅḇ → b
- ćċĉčçȼḉƈɔ → c
- ḋďḑđɗḍḓḏðɖ → d
要求仅用Office 365公式实现,支持Lambda函数,禁止使用插件或VBA。
旧方案的问题
之前适用于Excel 2019的非Lambda方案,以及其他公开方案存在以下问题:
- 运行速度慢
- 代码可读性极差,后续维护困难
- 只能处理单个字符串,没法批量处理数组或输出无变音的单词数组
- 未覆盖所有变音字符,遗漏的字符无法完成转换
Lambda优化方案
利用Office 365的Lambda函数封装转换逻辑,提升可读性、复用性,同时支持数组输入:
1. 准备字符映射表
先整理两个字符集字符串(可直接嵌入公式,也可定义为Excel命名范围):
- 变音字符集:
"áàȧäǎāãåąⱥấầắằǡǻǟẫẵảȁȃẩẳạḁậặăâḃƀɓḅḇćċĉčçȼḉƈɔḋďḑđɗḍḓḏðɖéèėêëěĕēẽęȩɇếềḗḕễḝẻȅȇểẹḙḛệéèêëḟƒǵġĝǧğḡģǥɠḣĥḧȟḩħḥḫⱨıíìïǐĭīĩįɨḯỉȉȋịḭíìïîȷĵǰḱǩķƙᶄḳḵⱪĺŀľɫⱡļƚłḷḽḻḹꝈḿṁṃńǹṅňñņɲṇṋṉñŋóòȯôöǒŏōõǫőốồɵøṓṑṍȫỗṏǿȭǭỏȍȏơổọớờỡộởợóòôöõṕṗᵽƥʀŕṙřŗɍɽȑȓṛṟṝśṡŝšṥṧṣṩşṫťƭṭʈṱṯⱦţŧúùûüǔŭūũůųűʉǘǜṹṻủȕȗưụṳứừṷṵữửựúùûüṽṿẃẁẇŵẅẉẋẍýỳẏŷÿȳỹɏỷƴỵýźżẑžƶẓẕ" - 普通字符集:
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbcccccccccddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffggggggggghhhhhhhhhiiiiiiiiiiiiiiiiiiiijjjkkkkkkkklllllllllllllmmmnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooopppprrrrrrrrrrrrsssssssssttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvwwwwwwxxyyyyyyyyyyyyzzzzzzz"
2. 创建Lambda转换函数
在Excel中定义名称(比如命名为CleanDiacritics),输入以下Lambda公式:
=LAMBDA(input, IF(ISARRAY(input), BYROW(input, LAMBDA(str, CleanDiacritics(str))), CONCAT( MAP(MID(input, SEQUENCE(LEN(input)), 1), LAMBDA(char, LET( pos, SEARCH(char, "áàȧäǎāãåąⱥấầắằǡǻǟẫẵảȁȃẩẳạḁậặăâḃƀɓḅḇćċĉčçȼḉƈɔḋďḑđɗḍḓḏðɖéèėêëěĕēẽęȩɇếềḗḕễḝẻȅȇểẹḙḛệéèêëḟƒǵġĝǧğḡģǥɠḣĥḧȟḩħḥḫⱨıíìïǐĭīĩįɨḯỉȉȋịḭíìïîȷĵǰḱǩķƙᶄḳḵⱪĺŀľɫⱡļƚłḷḽḻḹꝈḿṁṃńǹṅňñņɲṇṋṉñŋóòȯôöǒŏōõǫőốồɵøṓṑṍȫỗṏǿȭǭỏȍȏơổọớờỡộởợóòôöõṕṗᵽƥʀŕṙřŗɍɽȑȓṛṟṝśṡŝšṥṧṣṩşṫťƭṭʈṱṯⱦţŧúùûüǔŭūũůųűʉǘǜṹṻủȕȗưụṳứừṷṵữửựúùûüṽṿẃẁẇŵẅẉẋẍýỳẏŷÿȳỹɏỷƴỵýźżẑžƶẓẕ"), IFERROR( IF(EXACT(UPPER(char), char), UPPER(MID("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbcccccccccddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffggggggggghhhhhhhhhiiiiiiiiiiiiiiiiiiiijjjkkkkkkkklllllllllllllmmmnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooopppprrrrrrrrrrrrsssssssssttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvwwwwwwxxyyyyyyyyyyyyzzzzzzz", pos, 1)), MID("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbcccccccccddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffggggggggghhhhhhhhhiiiiiiiiiiiiiiiiiiiijjjkkkkkkkklllllllllllllmmmnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooopppprrrrrrrrrrrrsssssssssttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvwwwwwwxxyyyyyyyyyyyyzzzzzzz", pos, 1)), char ) ) )) ) ) )
注:如果嫌嵌入字符串太长,可把两个字符集定义为Excel命名范围,再替换公式中的对应字符串。
方案优势
- 支持数组批量处理:直接传入单元格区域(如
A1:A10)就能批量转换,返回对应结果数组 - 可读性大幅提升:通过Lambda拆分逻辑,分模块处理字符映射、大小写保留、数组遍历
- 可扩展性强:要新增支持的变音字符,只需在两个字符集的对应位置添加字符即可
- 速度更优:用MAP、BYROW等Office 365原生数组函数,比旧版逐行循环公式效率更高
使用示例
- 单个字符串转换:
=CleanDiacritics(B1) - 批量数组转换:
=CleanDiacritics(A1:A5)
内容的提问来源于stack exchange,提问作者Ne Mo
相关产品推荐
相关产品推荐

