求Excel中实现句号后首字母大写的可用公式
解决Excel中句号分隔句子的首字母大写问题
嘿,这个需求我之前也帮人处理过——PROPER会把所有单词首字母都大写,UPPER直接全转成大写,确实都不是你想要的效果。下面给你两种实用方案,按需选就行:
方案1:纯Excel公式(适配所有Excel版本)
假设你的目标文本在单元格A1,可以用这个数组公式(新版Excel直接回车确认,旧版需要按Ctrl+Shift+Enter触发数组计算):
=TEXTJOIN(". ", TRUE, UPPER(MID(TRIM(MID(SUBSTITUTE(A1, ".", REPT(" ", LEN(A1))), (ROW(INDIRECT("1:"&LEN(A1)-LEN(SUBSTITUTE(A1,".",""))+1))-1)*LEN(A1)+1, LEN(A1))),1,1)&RIGHT(TRIM(MID(SUBSTITUTE(A1, ".", REPT(" ", LEN(A1))), (ROW(INDIRECT("1:"&LEN(A1)-LEN(SUBSTITUTE(A1,".",""))+1))-1)*LEN(A1)+1, LEN(A1))), LEN(TRIM(MID(SUBSTITUTE(A1, ".", REPT(" ", LEN(A1))), (ROW(INDIRECT("1:"&LEN(A1)-LEN(SUBSTITUTE(A1,".",""))+1))-1)*LEN(A1)+1, LEN(A1))))-1))
公式逻辑拆解:
- 先用
SUBSTITUTE把每个句号替换成和原文本长度相同的空格,方便后续拆分句子 - 通过
MID提取每个被空格分隔的句子片段,TRIM自动去掉片段前后的多余空格 - 对每个片段的首字母用
UPPER转大写,再拼接片段的剩余部分 - 最后用
TEXTJOIN把处理好的句子用.拼接回完整文本
方案2:VBA自定义函数(更简洁易维护)
如果经常需要做这个操作,自定义函数会省心很多:
- 按
Alt+F11打开VBA编辑器 - 右键点击左侧的工作簿名称,选择「插入」→「模块」
- 粘贴以下代码:
Function SentenceCase(ByVal strText As String) As String Dim arrSentences() As String Dim i As Integer arrSentences = Split(strText, ".") For i = LBound(arrSentences) To UBound(arrSentences) arrSentences(i) = Trim(arrSentences(i)) If Len(arrSentences(i)) > 0 Then arrSentences(i) = UCase(Left(arrSentences(i), 1)) & Mid(arrSentences(i), 2) End If Next i SentenceCase = Join(arrSentences, ". ") End Function
- 回到Excel,在单元格输入
=SentenceCase(A1)就能直接得到处理后的文本
额外提示:
- 两种方案都会自动处理句号后的多余空格,比如
"hello. world"会变成"Hello. World" - 如果需要扩展处理感叹号、问号等其他标点,只要修改公式或VBA里的分隔符就行
内容的提问来源于stack exchange,提问作者Petros_Ch
相关产品推荐
相关产品推荐

