Excel精英培训网

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

[已解决]如何自编这个函数

[复制链接]
发表于 2016-5-5 18:08 | 显示全部楼层 |阅读模式
我想自编一个计算结果的函数,通过vba来实现。但是出错了,请大神解决。

1.jpg
我想直接输入=计算结果,    表格把正确的结果显示出来。
我通过vba写了一个自编函数,但是出错了,请高手帮我看看能解决吗?
2.jpg
这是我写的vba代码,但是结果报错。请高手看看。
  1. Function 计算结果()
  2. 计算结果 = Evaluate(Substitute(Substitute(Substitute(Substitute("[", "*ISTEXT(""["), "]", "]"")"), "×", "*"), "÷", "/"))
  3. End Function
复制代码
计算结果.rar (10.65 KB, 下载次数: 9)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-5-5 21:49 | 显示全部楼层
本帖最后由 砂海 于 2016-5-5 22:01 编辑

Function 计算结果(rg As String)

    Dim regx As Object
    Set regx = CreateObject("vbscript.regexp")  '建立正则表达式对象

    With regx

        .Global = True              '搜索全部字符
        .Pattern = "(\[.*?\])"      '尽可能短地 查找"
  • "

            计算结果 = Evaluate(.Replace(rg, ""))   '计算 ( 替换查找内容为 空值 )

        End With

    End Function

    --------------------------
    工作表中,
    =计算结果(C2)
  • 回复

    使用道具 举报

     楼主| 发表于 2016-5-5 22:10 | 显示全部楼层
    砂海 发表于 2016-5-5 21:49
    Function 计算结果(rg As String)

        Dim regx As Object

    语法错误

    QQ截图20160505220131.jpg


    QQ截图20160505220247.jpg
    报错。
    回复

    使用道具 举报

    发表于 2016-5-5 22:14 | 显示全部楼层    本楼为最佳答案   
    Function 计算结果(rg As String)

        Dim regx As Object
        Set regx = CreateObject("vbscript.regexp")  '建立正则表达式对象
       
        With regx
       
            .Global = True              '搜索全部字符
            .Pattern = "(\[.*?\])"      '尽可能短地 查找"[*]"
            
            计算结果 = Evaluate(.Replace(rg, ""))   '计算 ( 替换查找内容为 空值 )
       
        End With

    End Function
    回复

    使用道具 举报

     楼主| 发表于 2016-5-5 22:17 | 显示全部楼层
    砂海 发表于 2016-5-5 21:49
    Function 计算结果(rg As String)

        Dim regx As Object

    多了几个字符。
    1. Function 计算结果(rg As String)

    2.     Dim regx As Object
    3.     Set regx = CreateObject("vbscript.regexp")  '建立正则表达式对象

    4.     With regx

    5.         .Global = True              '搜索全部字符
    6.         .Pattern = "(\[.*?\])"      '尽可能短地 查找"

    7.         计算结果 = Evaluate(.Replace(rg, ""))   '计算 ( 替换查找内容为 空值 )

    8.     End With

    9. End Function
    复制代码
    后来把多余的字符删除,亲自测试可以了。多谢。
    回复

    使用道具 举报

    发表于 2016-5-5 22:28 | 显示全部楼层
    Function Operation(rng As Range)
        Dim i As Integer
        Dim ch As String, str As String
        Dim isJoin As Boolean

        isJoin = True
        For i = 1 To Len(rng)
            ch = Mid(rng, i, 1)

            If ch = "[" Or ch = "]" Then isJoin = False
            If isJoin Then str = str & ch
            If ch = "]" Then isJoin = True
        Next i

        Operation = Application.Evaluate(str)
    End Function


    写了,就放上

    评分

    参与人数 1 +1 收起 理由
    whwang0123 + 1 赞一个

    查看全部评分

    回复

    使用道具 举报

    发表于 2016-5-5 22:36 | 显示全部楼层
    很实用。
    回复

    使用道具 举报

     楼主| 发表于 2016-5-5 22:44 | 显示全部楼层
    爱疯 发表于 2016-5-5 22:28
    Function Operation(rng As Range)
        Dim i As Integer
        Dim ch As String, str As String

    你这个测试也正确,感谢。
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-26 03:00 , Processed in 0.428233 second(s), 17 queries , Gzip On, Yac On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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