如何添加小数并从字母数字字符串中删除文本

时间:2017-01-13 18:25:19

标签: excel vba excel-vba

我有大量的字母数据,我需要将其转换为纯粹的数字。字符串中没有文字。

实施例。 C0424.100 ---> 424.100(或0424.100)

小数点后总共有3个位置。关于如何解决这个问题的任何提示?我对VBA很陌生。所以基本上我需要删除所有文本和一个带右边三位数的小数。

4 个答案:

答案 0 :(得分:0)

这在String functions and how to use them

中有详细描述

然而,这应该让你开始。之后我会在Excel中处理格式化,但这是数字转换的简单字符串。如果字符串更复杂,请考虑使用搜索字符串函数查找数字,然后使用Right,Left,Mid函数修剪字符串。最后使用CDbl()函数将字符串转换为double。

宏代码如下:

Sub temp()
'
' temp Macro

    Range("A2").Select
        stringToConvert = Selection.Value
        trimmedString = Right(stringToConvert, Len(stringToConvert) - 1)
        numberToDisplay = CDbl(trimmedString)
    Range("A3").Value = numberToDisplay
End Sub

答案 1 :(得分:0)

你甚至需要VBA吗?如果您的数据始终只有一个前导字母字符,那么您可以使用标准Excel函数。对于要转换的A2中的条目,请将以下公式放在方便的单元格中(例如B2):

=VALUE(RIGHT(A2,LEN(A2)-1))

答案 2 :(得分:0)

不需要VBA。类似的东西:

=--MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),99)

将返回以第一个数字开头的字符串,并将其转换为数字值。然后,您可以根据需要在单元格中对其进行格式化。

以上内容适用于任意数量的非数字前导字符。如果只有一个非数字字符,那么@Skippy答案就更简单了

如果你必须有一个VBA例程,类似下面的东西应该工作 - 它将提取字符串中的第一个数字子字符串。如果之前或之后有非数字,则无关紧要。并且,如果没有数字,该函数将返回#NUM!错误

Option Explicit
Function ExtractNums(S As String) As Variant
    Dim I As Long

For I = 1 To Len(S)
    If IsNumeric(Mid(S, I, 1)) Then
        ExtractNums = Val(Mid(S, I))
        Exit Function
    End If
Next I

ExtractNums = CVErr(xlErrNum)

End Function

答案 3 :(得分:0)

我为你准备了UDF选项。

Option 1 :如果您想从字符串的开头删除所有字母:

Function RemoveFirstAlphas(txt As String) As String
    Dim i As Long
    For i = 1 To Len(txt)
        Select Case Mid$(txt, i, 1)
            Case "0" To "9": Exit For
            Case Else: Mid$(txt, i, 1) = Chr(32)
        End Select
    Next
    RemoveFirstAlphas = Trim(txt)
End Function

Option 2 :如果您要从整个字符串中删除所有字母:

Function RemoveAllAlphas(txt As String) As String
    Dim ObjRegex As Object
    Set ObjRegex = CreateObject("vbscript.regexp")
    With ObjRegex
        .Global = True
        .Pattern = "[a-zA-Z\s]+"
        RemoveAllAlphas = .Replace(Replace(txt, "-", Chr(32)), vbNullString)
    End With
End Function