前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA自定义函数:从文本中提取数字

VBA自定义函数:从文本中提取数字

作者头像
fanjy
发布2024-03-29 14:08:16
720
发布2024-03-29 14:08:16
举报
文章被收录于专栏:完美Excel完美Excel

标签:VBA,自定义函数

下面是一个自定义函数,可以从文本中提取数字。这个函数来源于forum.ozgrid.com,辑录于此,供参考。

代码:

代码语言:javascript
复制
Function ExtractNumber(rCell As Range, _
 Optional Take_decimal As Boolean, _
 Optional Take_negative As Boolean) As Double
 
 Dim iCount As Integer
 Dim i As Integer
 Dim iLoop As Integer
 Dim sText As String
 Dim strNeg As String
 Dim strDec As String
 Dim lNum As String
 Dim vVal, vVal2
 Dim c As Range
 
 For Each c In rCell
   sText = c
   If Take_decimal = True And Take_negative = True Then
     strNeg = "-" '负号必须在第一个数字之前.
     strDec = "."
   ElseIf Take_decimal = True And Take_negative = False Then
     strNeg = vbNullString
     strDec = "."
   ElseIf Take_decimal = False And Take_negative = True Then
     strNeg = "-"
     strDec = vbNullString
   End If
 
   iLoop = Len(sText)
   For iCount = iLoop To 1 Step -1
     vVal = Mid(sText, iCount, 1)
     If IsNumeric(vVal) Or vVal = strNeg Or vVal = strDec Then
       i = i + 1
       lNum = Mid(sText, iCount, 1) & lNum
       If IsNumeric(lNum) Then
         If CDbl(lNum) < 0 Then Exit For
       Else
         lNum = Replace(lNum, Left(lNum, 1), "", , 1)
       End If
     End If
 
     If i = 1 And lNum <> vbNullString Then lNum = CDbl(Mid(lNum, 1, 1))
   Next iCount
 
   If Not IsNumeric(lNum) Then lNum = 0
 
   ExtractNumber = ExtractNumber + CDbl(lNum)
   lNum = ""
 Next
End Function

其中,参数rCell代表要包含数字内容的单元格;参数Take_decimal代表是否提取水小数值,布尔型,可选;参数Take_negative代码是否提取负值,布尔型,可选。

下图1为应用示例。

图1

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档