ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 723|回复: 8

[求助] 如图所示,请教一下各位高手

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-6-30 16:05 | 显示全部楼层 |阅读模式
希望写出达到这结果的VBA函数
文本计算式.png

求教文本计算VBA函数.rar

6.73 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2020-6-30 16:17 | 显示全部楼层
=SUM(--TEXT(MID(B2,ROW($1:$99),1),"0;0;0;!0"))

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-6-30 16:23 | 显示全部楼层
kkf5560 发表于 2020-6-30 16:17
=SUM(--TEXT(MID(B2,ROW($1:$99),1),"0;0;0;!0"))

感谢,但是这个公式不适用大于10以上的数字

TA的精华主题

TA的得分主题

发表于 2020-6-30 17:22 | 显示全部楼层
本帖最后由 kkf5560 于 2020-6-30 17:27 编辑
  1. Function sumNum(r As Range)
  2.     Dim i&, str, num, door As Boolean, s
  3.     For i = 1 To Len(r.Value)
  4.         str = Mid(r.Value, i, 1)
  5.         door = IIf(IsNumeric(str), True, False)
  6.         If door = True Then
  7.             num = num & str
  8.         Else
  9.             s = s * 1 + num * 1
  10.             num = 0
  11.         End If
  12.     Next i
  13.     sumNum = s + num
  14. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-6-30 17:32 | 显示全部楼层
感觉用正则把“[]”去掉就可以了,就是不会正则

TA的精华主题

TA的得分主题

发表于 2020-6-30 18:40 | 显示全部楼层
Function GetChar(strChar As String, varType As Variant) '取值函数
   
    Dim objRegExp As Object
   
    Dim objMatch As Object
   
    Dim strPattern As String
   
    Dim arr, i, j, k
   
    Set objRegExp = CreateObject("vbscript.regexp")
   
    varType = LCase(varType)
   
    Select Case varType
        
    Case 1, "number"
        
        strPattern = "-?\d+(\.\d+)?"
        
    Case 2, "english"
        
        strPattern = "[a-z]+"
        
    Case 3, "chinese"
        
        strPattern = "[\u4e00-\u9fa5]+"
        
    End Select
   
    With objRegExp
        
        .Global = True
        
        .IgnoreCase = True
        
        .Pattern = strPattern
        
        Set objMatch = .Execute(strChar)
        
    End With
   
    If objMatch.count = 0 Then
        GetChar = ""
        Exit Function
    End If
   
    ReDim arr(0 To objMatch.count - 1)
    For Each cell In objMatch
        arr(i) = objMatch(i)
        i = i + 1
    Next
    k = ""
    For j = 0 To UBound(arr)
        If varType = 1 Then
           If k = "" Then k = Val(arr(j)) Else k = k + Val(arr(j))
        Else
           If k = "" Then k = arr(j) Else k = k & "," & arr(j)
        End If
    Next j
    GetChar = k
    Set objRegExp = Nothing
    Set objMatch = Nothing
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-1 00:09 | 显示全部楼层
Function abc(rng As Range) As Long
Dim t, i%
t = Split(rng, "+")
For i = 0 To UBound(t)
    If InStr(t(i), "[") Then
        t(i) = Split(t(i), "[")(0)
    End If
    abc = abc + t(i)
Next
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-1 10:24 | 显示全部楼层
  1. Sub test()
  2. Dim I As Integer
  3. For I = 2 To [A65536].End(xlUp).Row
  4. If Cells(I, 2) <> "" Then
  5. Cells(I, 6) = "=" & Replace(Replace(Cells(I, 2), "[", "+n("""), "]", """)")
  6. End If
  7. Next I
  8. End Sub
复制代码

感谢几位的解答,对我帮助很大,我写了个过程,也实现了类似效果,供其他人参考
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 23:40 , Processed in 0.039518 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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