如何让Excel单元格粘贴时自动将非断空格(char(160))替换为普通空格
自动替换非断空格(Char(160))的Excel解决方案
不用公式、不新增冗余列,直接在粘贴时自动转换,用工作表事件宏就能搞定:
操作步骤
1. 打开VBA编辑器
- 右键点目标工作表的标签(比如你的「报表」表),选查看代码
- 或者直接按快捷键
Alt + F11打开
2. 粘贴事件代码
在弹出的代码编辑窗口里,把下面这段代码粘进去:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range ' 只锁定B列从B2开始的区域 Set rng = Intersect(Target, Me.Range("B2:B" & Me.Cells(Me.Rows.Count, "B").End(xlUp).Row)) If Not rng Is Nothing Then Application.EnableEvents = False ' 防止重复触发事件 ' 把非断空格直接替换成普通空格 rng.Replace What:=Chr(160), Replacement:=" ", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False Application.EnableEvents = True ' 恢复事件触发 End If End Sub
代码说明
- 这个
Worksheet_Change事件会在你往单元格里粘贴(或修改)内容时自动触发 - 只处理B列B2及以下的单元格,不会影响其他列
- 直接在原单元格替换非断空格,不用插新列,也不会出现循环引用
- 加了
Application.EnableEvents = False是为了避免替换操作再次触发事件,防止死循环
最后注意
- 保存文件时要选**启用宏的工作簿(.xlsm)**格式,不然宏会失效
- 如果多个工作表需要这个功能,把代码复制到对应工作表的代码窗口就行
内容的提问来源于stack exchange,提问作者Christopher McBurney
相关产品推荐
相关产品推荐

