我有一个电子表格,其中的单元格内容是文本和美元值的混合。整个单元格是一串文本。例如,一个单元格可能包含“Tom欠65.5美元”
现在,不幸的是,我给了电子表格,其中美元值没有最后的“0”,因为它们只是文本的字符串,我不能轻易地格式化单元格。我尝试使用find和replace将值更改为正确的格式,但是我有数千条记录,尝试并考虑所有场景需要很长时间。
有没有办法检查字符串的一部分是否为美元金额,然后如果需要则追加尾随0?像
这样的东西如果$ * = 4个字符,则在末尾附加0 如果$ *是< 3个字符,在末尾附加.00
我还应该说货币值并不总是在文本字符串的末尾,并且它们并不总是只在一个小数位上结束。在句子中间可以找到“6.75美元”。另外,只是要在齿轮中再插一把扳手,字符串中可能还有其他数字,所以我需要能够只跟踪一个美元符号后的数字。
答案 0 :(得分:2)
我认为这个VBA用户定义函数(UDF)可以满足您的需求。这是基于我在http://yoursumbuddy.com/regex-function-sum-numbers-string/的开创性工作:
Function FixDollarsInStrings(Instring As String) As String
Dim regex As VBScript_RegExp_55.RegExp
Dim rgxMatch As VBScript_RegExp_55.Match
Dim rgxMatches As VBScript_RegExp_55.MatchCollection
Dim Outstring As String
Set regex = New VBScript_RegExp_55.RegExp
With regex
.Global = True
.Pattern = "(^| )\$(\d+|\.|,)+((?= )|$)"
Outstring = Instring
If .test(Instring) Then
Set rgxMatches = .Execute(Instring)
For Each rgxMatch In rgxMatches
If IsNumeric(Trim(Replace(rgxMatch, ",", ""))) Then
Outstring = Replace(Outstring, Trim(rgxMatch), Format(rgxMatch, "$#,##0.00"))
End If
Next rgxMatch
End If
End With
FixDollarsInStrings = Outstring
End Function
要使其正常工作,首先需要在VBE中的工具>参考中设置Microsoft VbScript Regular Expressions 5.5
的引用。然后将此代码复制到常规模块。
然后将其称为:
= fixDollarsInStrings(A2)
答案 1 :(得分:2)
我相信这可以在不使用VBA的情况下完全在Excel中完成(尽管如果你向我展示工作表的屏幕截图,我可以写一个小宏来执行此操作)。以下是我们要做的基本概要:
当前工作表
从我的想象,这里是一个基本的演示如何你的 工作表现在看起来:
如您所见,第一个(或原始列)包含混合文本和美元金额。
将公式插入第二列
接下来,我们将以下公式插入第二列:
=IF(IFERROR(SEARCH("$",A4)>0,0)>0,VALUE(RIGHT(A4,LEN(A4)-SEARCH("$",A4))),"False")
将公式插入第三列
现在我们插入公式以连接第一列中值的左侧,以及第二列中值的右侧(将其再次格式化为文本后)。这是公式:
=IF(B7<>"False",CONCATENATE(LEFT(A7,FIND("$",A7)-1),TEXT(B7,"$#,##0.00")),"")
现在您可以将值复制/粘贴回第一列,然后就完成了。
我忘了提到你应该改变那个连接公式,如果要复制/粘贴它们,将值恢复为原始值。这是编辑后的公式:
=IF(B7<>"False",CONCATENATE(LEFT(A7,FIND("$",A7)-1),TEXT(B7,"$#,##0.00")),A7)