如何根据VBA中的内容更改单元格

时间:2012-09-21 10:11:06

标签: excel vba excel-vba

我有很多单元格包含一些数字和其他不相关的字符。例如,单元格可能如下:65f11,345asd

我的目标是删除这些单元格中除了数字之外的所有内容,因此我可以使用这些数字进行进一步的计算。我在不同的网站上发现了很多类似的问题,但它们非常具体,我仍然不明白如何正确地做到这一点。

所以问题是如何根据内容使用更换细胞或甚至一系列细胞?我有一些想法如何使用字符串函数替换它。但没有什么看起来不错。

谢谢!

2 个答案:

答案 0 :(得分:9)

使用RegExp的另一种方式

添加参考

添加对 Microsoft VBScript正则表达式5.5 的引用。见下图

enter image description here

代码:将其粘贴到模块中

Option Explicit

Function GetNumbers(rng As Range) As Variant
    Dim StrSample As String
    Dim myRegExp As RegExp
    Dim myMatches As MatchCollection
    Dim myMatch As Match

    StrSample = rng.Value

    Set myRegExp = New RegExp

    With myRegExp
        .Pattern = "[^0-9]"
        .IgnoreCase = True
        .Global = True
    End With

    Set myMatches = myRegExp.Execute(StrSample)

    For Each myMatch In myMatches
      Debug.Print myMatch.Value
      StrSample = Replace(StrSample, myMatch.Value, "")
    Next
    GetNumbers = StrSample
End Function

<强> SCREENSHOT

enter image description here

修改

这是一个较短的版本,根本不使用循环。

Function GetNumbers(rng As Range) As Variant
    Dim myRegExp As RegExp
    Set myRegExp = New RegExp
    myRegExp.Pattern = "[^0-9]"
    myRegExp.Global = True
    GetNumbers = myRegExp.Replace(rng.Value, "")
End Function

答案 1 :(得分:3)

小功能

public function TONUM(str As string) As string
dim i As long
for i = 1 To len(str)
    if not mid$(str, i, 1) Like "[0-9]" then mid$(str, i, 1) = "?"
next
TONUM = replace$(str, "?", "")
end function