Excel VBA使用通配符替换字符串中的字符串

时间:2017-01-12 16:30:27

标签: excel vba excel-vba

我遇到了困难,到目前为止找不到解决方案也没有运气。

我的VBA会收集$80,000.50.之类的数字,我试图让VBA移除最后一段时间,使其看起来像$80,000.50但不使用右()。

问题是在最后一段时间之后有隐藏的空格或字符,这将是一个很大的新问题要处理,所以我只是在寻找类似的东西:

replace("$80,000.50.",".**.",".**")

这可以在VBA中使用吗?

4 个答案:

答案 0 :(得分:4)

我不能发表评论......

InStrRev怎么样?

Private Sub this()
    Dim this As String
    this = "$80,000.50."
    this = Left(this, InStrRev(this, ".") - 1)
    Debug.Print ; this
End Sub

答案 1 :(得分:1)

Mid + Find

您可以使用Mid和Find功能。像这样:

enter image description here

Find会找到第一个点.字符。如果您收集的所有值都是带有2位小数的货币,存储为文本,这将很有效。

公式为:=MID(A2,1,FIND(".",A2)+2)

VBA解决方案

Function getStringToFirstOccurence(inputUser As String, FindWhat As String) As String
    getStringToFirstOccurence = Mid(inputUser, 1, WorksheetFunction.Find(FindWhat, inputUser) + 2)
End Function

其他可能的解决方案,提示

修剪+清除+替代(字符(160)):Chandoo - Untrimmable Spaces – Excel Formula
最终,您可以将正则表达式实现到Excel UDF中:VBScript’s Regular Expression Support

答案 2 :(得分:0)

怎么样:

Sub dural()
    Dim r As Range
    For Each r In Selection
        s = r.Text
        l = Len(s)
        For i = l To 1 Step -1
            If Mid(s, i, 1) = "." Then
                r.Value = Mid(s, 1, i - 1) & Mid(s, i + 1)
                Exit For
            End If
        Next i
    Next r
End Sub

这将删除最后一个句点并保持所有其他字符不变。之前:

enter image description here

之后:

enter image description here

修改#1

此版本不需要循环遍历单元格中的字符:

Sub qwerty()
    Dim r As Range

    For Each r In Selection
        If InStr(r.Value, ".") > 0 Then r.Characters(InStrRev(r.Text, "."), 1).Delete
    Next r
End Sub

答案 3 :(得分:0)

最短解决方案

只需使用Val命令即可​​。我认为这无疑是一个数字图?摆脱逗号和美元符号,然后转换为值,这将忽略第二个点和任何其他尾随字符!坚固性未经测试,但似乎有效...

Dim myString as String
myString = "$80,000.50.   junk characters     "

' Remove commas and dollar signs, then convert to value.
Dim myVal as Double
myVal = Val(Replace(Replace(myString,"$",""),",",""))

' >> myVal = 80000.5

' If you're really set on getting a formatted string back, use Format:
myString = Format(myVal, "$000,000.00")

' >> myString = $80,000.50

来自Documentation

  

Val函数停止读取第一个字符处的字符串,该字符串无法识别为数字的一部分。通常被视为数值的一部分的符号和字符(例如美元符号和逗号)无法识别。

这就是为什么我们必须首先删除美元符号,以及为什么它会忽略第二个点之后的所有垃圾,或者最后一些非数字的东西!

使用字符串

编辑:我先写了这个解决方案,但现在认为上面的方法更全面,更简洁 - 留在这里是为了完整。

Trim()删除字符串末尾的空格。然后你可以简单地使用Left()来摆脱最后一点......

' String with trailing spaces and a final dot
Dim myString as String
myString = "$80,000.50.    "

' Get rid of whitespace at end
myString = Trim(myString)

' Might as well check if there is a final dot before removing it
If Right(myString, 1) = "." Then

    myString = Left(myString, Len(myString) - 1)

End If

' >> myString = "$80,000.50"