ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 杨成云

[分享] 删除文本中的空格和非打印字符

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-4-2 11:40 | 显示全部楼层
晕死我了,一个字我也没看懂,先收藏下,好好仔细研究

TA的精华主题

TA的得分主题

发表于 2014-4-27 09:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
真的,经常会遇到的。

TA的精华主题

TA的得分主题

发表于 2014-9-17 16:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-10-14 10:21 | 显示全部楼层
高手,学习了,最近两天才遇到一个从学籍系统里导出的身份证号码问题,就是有这些字符作怪,收藏

TA的精华主题

TA的得分主题

发表于 2015-12-1 08:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
总结的很好,这些小问题,经常带来大麻烦,谢谢版主!

TA的精华主题

TA的得分主题

发表于 2016-1-26 14:32 | 显示全部楼层
qjyzchina 发表于 2011-10-8 09:21
有一个简单的办法,
银行导出来的字符不能相加的问题,把EXCEL整个复制到WORD。然后再从WORD复制回EXCEL。 ...

试过你的法子,不管用呀

TA的精华主题

TA的得分主题

发表于 2017-9-5 11:24 | 显示全部楼层
虽然没看懂,但是神好用,谢谢lz。。

TA的精华主题

TA的得分主题

发表于 2018-6-8 15:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-6-11 16:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
刚好碰上类似问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-20 11:07 | 显示全部楼层

使用VBA代码删除工作表中的非打印控制符
Sub 正则替换()
    Dim X, i, j, a
    Dim 查找 As String, 替换 As String, 提取 As String
    Dim matches As Object
    Dim match As Object
    On Error Resume Next
    Call 查替保护公式
    Application.Calculation = xlCalculationManual  '将计算方式改为手动
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect ("")
    ActiveSheet.UsedRange.Replace What:=" ", Replacement:="ycyok", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    ActiveSheet.UsedRange.Replace What:=" ", Replacement:="YCYOK", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False  '取消筛选,以防出错
    查找 = "\s"    '
    替换 = ""    '
    dyh = "'"
    Leftchr = Left(替换, 7)
    Rightchr = Right(替换, 7)
    nl = Mid(Leftchr, 5, 2)
    nR = Mid(Rightchr, 5, 2)
    If Mid(nl, 2, 1) = ")" Then nl = Mid(nl, 1, 1): Leftchr = Left(替换, 6)
    If Mid(nR, 2, 1) = ")" Then nR = Mid(nR, 1, 1): Rightchr = Right(替换, 6)
   
    If Left(替换, 1) = " " Or Right(替换, 1) = " " Or Left(替换, 1) = " " Or Right(替换, 1) = " " Then Exit Sub
    Dim RegEx, Cel
    Set RegEx = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
    With RegEx
        .Global = True '设置全局可用
        .IgnoreCase = True
        .MultiLine = True
        .Pattern = 查找
    End With
    a = Selection.Address
    If InStr(a, ":") = 0 Then
        If ActiveCell.Address = "$A$1" Then [b1].Select
        ActiveSheet.UsedRange.Activate
        a = Selection.Address
    End If
    arr1 = Split(a, "$")
    If arr1(1) Like "*:" Then
        If IsNumeric(Mid(arr1(1), 1, Len(arr1(1)) - 1)) Then
            Y = ActiveSheet.UsedRange.Column
            X = ActiveSheet.UsedRange.Columns.Count + Y - 1
            Y = Split(Cells(1, Y).Address, "$")(1)
            X = Split(Cells(1, X).Address, "$")(1)
            Z = ActiveSheet.UsedRange.Rows.Count
            n = arr1(2)
            If Z < n Then arr1(2) = Z
            a = "$" & Y & "$" & arr1(1) & "$" & X & "$" & arr1(2)
        Else
            a = "$" & Mid(arr1(1), 1, Len(arr1(1)) - 1) & "$" & ActiveSheet.UsedRange.Row & ":$" & arr1(2) & "$" & ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
        End If
    End If
    If Range(a).Rows.Count + Range(a).Columns.Count >= 2 Then
        arr = Range(a).Value
        For i = 1 To UBound(arr, 2)
            For j = 1 To UBound(arr)
               
                F2 = RegEx.Replace(arr(j, i), Leftchr & 替换 & Rightchr)
               
                If (Left(F2, 1) = 0 And Left(F2, 2) <> "0.") Then  '保护0开头的文本数字不被修改成数值型
                    arr(j, i) = dyh & F2
                Else
                    If Val(F2) > 1E+15 Then arr(j, i) = "'" & F2 Else arr(j, i) = F2  '保护15位以上文本数字
                End If
            Next j
        Next i
        Range(a).Value = arr
    Else
        Range(a) = RegEx.Replace(Range(a), Leftchr & 替换 & Rightchr)
    End If
    ActiveSheet.Unprotect ("")
    ActiveSheet.UsedRange.Replace What:="ycyok", Replacement:=" ", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    ActiveSheet.UsedRange.Replace What:="YCYOK", Replacement:=" ", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    If ActiveSheet.ProtectContents = False Then    '如果当前表未保护
        Pass = ""
        ActiveSheet.Protect Password:=Pass   '利用原密码工作表保护
    End If
    Set matches = Nothing
    Application.Calculation = xlCalculationAutomatic  '恢复自动计算
    Application.ScreenUpdating = True
End Sub
Sub 查替保护公式()
    On Error Resume Next
    If ActiveSheet.ProtectContents = True Then    '如果当前表已保护
        Pass = Application.InputBox("请输入解锁密码,如果没有就保持空白:", "解锁密码", "", , , , , 2)  '输入解锁密码
    End If
    NewPass = ""
    ActiveSheet.Unprotect Pass  '利用原密码解除工作表保护
    If Err.Number = 1004 Then MsgBox "当前表不存在公式": Exit Sub  '如果错误则提示,并退出程序
    Cells.Locked = False    '取消所有单元格的锁定属性
    Cells.FormulaHidden = False  '将隐藏公式也取消
    With Cells.SpecialCells(xlCellTypeFormulas, 23)  '对公式区域进行操作
        .Locked = True  '如果密码正确则锁定所有公式区
        .FormulaHidden = False  '公式可见
        '保护工作表(允许用设置格式、编辑对象等等)
        ActiveSheet.Protect Password:=NewPass, DrawingObjects:=True, CONTENTS:=True, Scenarios:=True, _
            AllowFormattingCells:=False, AllowFormattingColumns:=False, AllowFormattingRows:=False, _
            AllowInsertingColumns:=False, AllowInsertingRows:=False, AllowInsertingHyperlinks:=False, _
            AllowDeletingColumns:=False, AllowDeletingRows:=False, AllowSorting:=True, _
            AllowFiltering:=False, AllowUsingPivotTables:=False
        ActiveSheet.EnableSelection = xlNoRestrictions  '锁定的单元格能选定
    End With
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-13 14:21 , Processed in 0.034044 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表