在文本字符串中间的货币值末尾添加“0”

时间:2013-07-19 21:23:50

标签: excel excel-2010

我有一个电子表格,其中的单元格内容是文本和美元值的混合。整个单元格是一串文本。例如,一个单元格可能包含“Tom欠65.5美元”

现在,不幸的是,我给了电子表格,其中美元值没有最后的“0”,因为它们只是文本的字符串,我不能轻易地格式化单元格。我尝试使用find和replace将值更改为正确的格式,但是我有数千条记录,尝试并考虑所有场景需要很长时间。

有没有办法检查字符串的一部分是否为美元金额,然后如果需要则追加尾随0?像

这样的东西

如果$ * = 4个字符,则在末尾附加0 如果$ *是< 3个字符,在末尾附加.00

我还应该说货币值并不总是在文本字符串的末尾,并且它们并不总是只在一个小数位上结束。在句子中间可以找到“6.75美元”。另外,只是要在齿轮中再插一把扳手,字符串中可能还有其他数字,所以我需要能够只跟踪一个美元符号后的数字。

2 个答案:

答案 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)

enter image description here

答案 1 :(得分:2)

在Excel中执行此操作的步骤。 。

我相信这可以在不使用VBA的情况下完全在Excel中完成(尽管如果你向我展示工作表的屏幕截图,我可以写一个小宏来执行此操作)。以下是我们要做的基本概要:

  1. 在右侧插入一列(如果它是空白则使用那一列) 含有混合数据的细胞。
  2. 在每个单元格中插入一个公式,(a)检查数据是否有美元符号,(b)从中开始向右拉出值 美元符号,(c)将该文本转换为值,(d)将该值插入单元格。
  3. 在我们刚刚创建的列的右侧插入另一列。
  4. 在该新列中,插入公式以连接第一列和第二列中的值。连接时确保使用文本函数格式化美元金额(我将其包含在下面显示的串联公式中)。

  5. 说明步骤。 。

    当前工作表

    从我的想象,这里是一个基本的演示如何你的    工作表现在看起来:

    enter image description here

    如您所见,第一个(或原始列)包含混合文本和美元金额。

    将公式插入第二列

    接下来,我们将以下公式插入第二列:

    =IF(IFERROR(SEARCH("$",A4)>0,0)>0,VALUE(RIGHT(A4,LEN(A4)-SEARCH("$",A4))),"False")
    

    Picture of formula entered into second column

    将公式插入第三列

    现在我们插入公式以连接第一列中值的左侧,以及第二列中值的右侧(将其再次格式化为文本后)。这是公式:

    =IF(B7<>"False",CONCATENATE(LEFT(A7,FIND("$",A7)-1),TEXT(B7,"$#,##0.00")),"")
    

    Picture of formula entered into third column

    现在您可以将值复制/粘贴回第一列,然后就完成了。


    修改

    我忘了提到你应该改变那个连接公式,如果要复制/粘贴它们,将值恢复为原始值。这是编辑后的公式:

    =IF(B7<>"False",CONCATENATE(LEFT(A7,FIND("$",A7)-1),TEXT(B7,"$#,##0.00")),A7)