切断列中的所有非数字值

时间:2017-06-08 08:28:02

标签: excel vba excel-vba

在Excel或VBA中是否有办法按其角色过滤单元格,然后将其插入单独的列?

例如,我的数据如下所示:

A3200,12 
AB2000,32 
-300,34 
32567,32A 
6745,21AB 
500+

我希望结果如下:

Column A
3200,12
2000,23
300,34
32567,32
6745,21
500

Column B
A
AB
-
A
AB
+

那么有没有办法从每个单元格中删除所有非数字值并将它们复制到另一列?

1 个答案:

答案 0 :(得分:1)

一种方法是创建UDF(用户区分功能)。

将以下2个功能放入VBA模块中:

Function Digits(s As String) As String
     With CreateObject("vbscript.regexp")
        .Pattern = "[^0-9,]"
        .Global = True
        Digits = .Replace(s, "")
    End With
End Function

Function NonDigits(s As String) As String
   With CreateObject("vbscript.regexp")
      .Pattern = "[0-9,]"
      .Global = True
      NonDigits = .Replace(s, "")
   End With
End Function

要使用这些功能:如果数据在单元格A1中,只需在单元格B1中键入公式

=Digits(A1)

并在单元格C1中:

=NonDigits(A1)

第一个会将您的数据作为仅包含数字的文本返回。要将其转换为数字,请使用VALUE函数。

第二个返回没有任何数字的数据。