在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/的开创性工作&#xFF1A;

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来做这个)。 这里是我们要做的基本轮廓:

  1. 在包含混合数据的单元格的右侧插入一列(如果是空白的话)。
  2. (a)检查数据是否有美元符号,(b)拉取美元符号右侧的值,(c)将该文本转换成值,(d)将该值插入到单元格中。
  3. 在我们刚刚创build的列的右侧插入另一列。
  4. 在该新列中,插入一个公式以连接来自第一列和第二列的值。 确保使用文本函数来格式化连接时的美元金额(我将其包含在下面显示的连接公式中)。

说明步骤。 。 。

当前工作表

从我的想象中,下面是您的工作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)