Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5707|回复: 4

求教:VBA 留中文留符号或空格 代码

[复制链接]
发表于 2016-1-21 16:12 | 显示全部楼层 |阅读模式
想将复制粘贴在表格中的文字和文字后的;留下,找到了留文字的代码,但只留下了文字,想把;也留下,求解!谢谢啦!
如单元格中内容为:aaaa你好; bbbb不好; cccc挺好;(注释;为英文的分号,分号后面有空格)
希望留下的为:你好;不好;挺好;或者你好+空格+不好+空格+挺好+空格也行

留文字代码如下

Sub 留汉字()
    Dim X, i, j
    On Error GoTo ren
    Application.ScreenUpdating = False

    Dim RegEx, Cel
    Set RegEx = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
    RegEx.Global = True     '设置全局可用
    RegEx.Pattern = "[^\u4e00-\u9fa5]"
    a = Selection.Address
    If a = "" Then Exit Sub
    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) & "$" & "1:$" & arr1(2) & "$" & ActiveSheet.UsedRange.Rows.Count
        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)
                arr(j, i) = RegEx.Replace(arr(j, i), "")
            Next j
        Next i
        Range(a).Value = arr
    Else
        Range(a) = RegEx.Replace(Range(a), "")
    End If
    Application.ScreenUpdating = True
ren:
End Sub

工作簿1.rar

14.46 KB, 下载次数: 3

发表于 2016-1-21 16:33 | 显示全部楼层
Function f(x)
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "[\w.*? /]"
        f = .Replace(x, "")
    End With
End Function
2.rar (16.66 KB, 下载次数: 7)
回复

使用道具 举报

发表于 2016-1-21 16:41 | 显示全部楼层
  1. Function Hz(x)
  2.     For i = 1 To Len(x)
  3.         y = Mid(x, i, 1)
  4.         If Asc(y) > 0 And Asc(y) <> 59 Then Mid(x, i, 1) = "A"
  5.     Next
  6.     Hz = Replace(x, "A", "")
  7. End Function
复制代码
回复

使用道具 举报

发表于 2016-1-21 17:10 | 显示全部楼层
用这个字符串试试:Ni Hao/你好; Bu Hao/不好; (,。Hai Xing/可不行
回复

使用道具 举报

发表于 2016-1-21 18:47 | 显示全部楼层
原贴的语句太长了,2楼的语句为标准化教科书式的,太好。在学习的基础上,试着仿了一下
Function f(x)
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "[^\u4e00-\u9fa5 ]"     ‘加分号则为.Pattern = "[^\u4e00-\u9fa5;]"
        f = .Replace(x, "")
    End With
End Function
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-20 22:42 , Processed in 0.299554 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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