我遇到了困难,到目前为止找不到解决方案也没有运气。
我的VBA会收集$80,000.50.
之类的数字,我试图让VBA移除最后一段时间,使其看起来像$80,000.50
但不使用右()。
问题是在最后一段时间之后有隐藏的空格或字符,这将是一个很大的新问题要处理,所以我只是在寻找类似的东西:
replace("$80,000.50.",".**.",".**")
这可以在VBA中使用吗?
答案 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功能。像这样:
Find
会找到第一个点.
字符。如果您收集的所有值都是带有2位小数的货币,存储为文本,这将很有效。
公式为:=MID(A2,1,FIND(".",A2)+2)
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
这将删除最后一个句点并保持所有其他字符不变。之前:
之后:
修改#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
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"