在string中间的货币值的末尾添加一个“0”
我有一个电子表格,其内容是文本和美元值的混合。 整个单元格是一串文本。 例如,一个单元格可能包含“Tom欠$ 65.5”
现在,不幸的是,我得到的电子表格的美元价值没有最后的“0”,因为他们只是string,我不能轻松格式化单元格。 我已经尝试使用查找和replace将值更改为正确的格式,但我有成千上万的logging,这将需要太长时间来尝试和考虑所有情况。
有没有办法来检查是否一部分的string是一个美元金额,然后附加尾随0,如果需要? 就像是
如果$ * = 4个字符,则追加0到结尾
如果$ *是<3个字符,则在末尾附加.00
我也应该说,货币价值并不总是在string的末尾,并不总是以小数点后一位结束。 可以在句子中find“$ 6.75”。 另外,只要在扳机上另外放置一个扳手,绳子上还可以有其他数字,所以我需要能够只在美元符号后面加上数字。
我认为这个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的Tools> References中设置对Microsoft VbScript Regular Expressions 5.5
引用。 然后将此代码复制到常规模块。
然后你这样称呼它:
= fixDollarsInStrings(A2)
在Excel中执行此操作的步骤。 。 。
我相信这完全可以在不使用VBA的情况下在Excel中完成(尽pipe如果您向我展示工作表的屏幕截图,我可以写一个小的macros来做这个)。 这里是我们要做的基本轮廓:
- 在包含混合数据的单元格的右侧插入一列(如果是空白的话)。
- (a)检查数据是否有美元符号,(b)拉取美元符号右侧的值,(c)将该文本转换成值,(d)将该值插入到单元格中。
- 在我们刚刚创build的列的右侧插入另一列。
- 在该新列中,插入一个公式以连接来自第一列和第二列的值。 确保使用文本函数来格式化连接时的美元金额(我将其包含在下面显示的连接公式中)。
说明步骤。 。 。
当前工作表
从我的想象中,下面是您的工作performance在的外观的基本演示:
正如您所看到的,第一个(或原始列)包含混合文本和美元金额。
将公式插入第二列
接下来我们将下面的公式插入第二列:
=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)