Excel精英培训网

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

求助:提取连续汉字或字母后加指定字符串

[复制链接]
发表于 2017-12-30 15:24 | 显示全部楼层 |阅读模式
VBA自动在连续的汉字 或 汉字+字母组合 或 字母收尾加英文括号
Worksheet_Change事件,范围Range("A1:A2")
substitute配合find函数或VBA_Replace what,Replacement配合instr的复杂吗,怎么编写单元格内带有变量的代码?
有没有其他办法?

求助:提取连续汉字或字母后加指定字符串.rar

11.21 KB, 下载次数: 6

问题求助

发表于 2017-12-31 13:19 | 显示全部楼层
在A列输入带+的字符串,在B列得到你要的结果,见附件

求助:提取连续汉字或字母后加指定字符串.rar

13.91 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2018-1-2 12:47 | 显示全部楼层
fjmxwrs 发表于 2017-12-31 13:19
在A列输入带+的字符串,在B列得到你要的结果,见附件

谢谢版主reg.Pattern="\d+|[一-龡][a-zA-Z]+"中的.Pattern="\d+|[一-龡][a-zA-Z]+"不理解

尤其“|[一-龡]”完全不理解
\d不理解,
|[一-龡]猜测是不是特殊字符?前面为什么会有个“|”?
[a-zA-Z]猜测是不是小写及大写字母
回复

使用道具 举报

发表于 2018-1-2 20:58 | 显示全部楼层
zizunbao 发表于 2018-1-2 12:47
谢谢版主reg.Pattern="\d+|[一-龡][a-zA-Z]+"中的.Pattern="\d+|[一-龡][a-zA-Z]+"不理解

尤其“|[一- ...

正则表达式,|分隔,前面为数字,后面是文字与字母及符号
回复

使用道具 举报

 楼主| 发表于 2018-1-4 11:52 | 显示全部楼层
fjmxwrs 发表于 2018-1-2 20:58
正则表达式,|分隔,前面为数字,后面是文字与字母及符号

版主我在网上恶补了一下like正则表达式
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim str1, arr, crr, x%, r%, reg
    If Target.Column = 1 Then
        r = Target.Row
        Set reg = CreateObject("vbscript.regexp")
        str1 = Target.Value
        'If str1 Like "*+*" = False And str1 Like "*-*" = False And str1 Like "***" = False And str1 Like "*/*" And str1 Like "*.*" = False Then
        If str1 Like "*+*" = False Then Exit Sub
         'If str1 Like "*-*" = False Then Exit Sub
        'If str1 Like "(-?\d+)(\ *[+\-*/]\ *-?\d+)*" = False Then Exit Sub
        arr = Split(str1, "+")
        str1 = ""
        For x = 0 To UBound(arr)
            With reg
                .Global = True
                .Pattern = "\d+|[一-龡][a-zA-Z]+"
                '.Pattern = "\d+[a-zA-Z]"
                '.Pattern = "\d+|[a-zA-Z]"
                crr = Split(.Replace(arr(x), "$&,"), ",")
                If UBound(crr) > 0 Then
                    If crr(1) = "" Then
                        str1 = str1 & crr(0) & "+"
                    Else
                        str1 = str1 & crr(0) & "(" & crr(1) & ")" & "+"
                    End If
                Else
                    str1 = str1 & "(" & crr(0) & ")" & "+"
                End If
            End With
        Next x
        Cells(r, 2) = Left(str1, Len(str1) - 1)
    End If
End Sub
我尝试了很多,现在您帮我写的代码中除了加法,其他都不能用。其实我的想法是解决单元格数字后面如果有汉字或字母就自动加英文的括号,然后我就能用宏表函数evaluate进行计算了。以前是定义名称然后计算,但是有时候因为EXCEL版本或同事在别的电脑上的原因定义名称就不起作用了。
每次单元格汉字都需要加个[],我想智能化一点所以就有了这么个提问了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 08:39 , Processed in 0.261176 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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