从数字excel vba中删除点

时间:2016-03-24 14:57:46

标签: excel vba excel-vba replace

我的列中包含数字(格式为常规),如下所示

| 2.500,00 |
| 70,2     |
| ...      |

我有一个宏,而不是其他操作尝试删除列中的点。 当我手动完成它完美的工作。结果是

| 2500,00 |
| 70,2    | 
| ...     |

但是当我使用以下行时:

Selection.Replace What:=".", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

它还删除了没有找到点的单元格中的逗号,结果如下所示:

| 2500,00 |
| 702     |
| ...     |

我不明白发生了什么,因为细胞的格式保持一般,任何线索都知道为什么会发生这种情况。谢谢!

5 个答案:

答案 0 :(得分:2)

您需要将Excel中使用的小数分隔符更改为逗号而不是点以匹配您的数据。

从Microsoft复制:Change the character used to separate thousands or decimals

  

单击“Microsoft Office按钮Office”按钮图像,然后单击“Excel选项”。

     

在“高级”选项卡上的“编辑选项”下,清除“使用系统分隔符”复选框。

     

在Decimal分隔符和Thousands分隔符框中键入新的分隔符。

     

提示:如果要再次使用系统分隔符,请选中“使用系统分隔符”复选框。

     

注意:对于永久性解决方案,您必须更改“控制面板”中的区域设置。

另一种解决方案:

实际上我通常只使用公式来删除点并将逗号转换为点。然后使用格式显示您想要的数字。

=VALUE(SUBSTITUTE(SUBSTITUTE(A1,".",""),",","."))

答案 1 :(得分:1)

使用应用程序定义的小数分隔符:

Selection.Replace What:=Application.DecimalSeparator, Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

答案 2 :(得分:1)

我有同样的问题。还使用逗号作为小数点分隔符。手动替换点时,我完全没有问题,当我使用VBA进行替换时,逗号被替换并且数据被破坏。帮助我的是,我首先在excel中使用了trim函数,然后将其粘贴为值,直到将点替换为“ nothing”。

代码如下:

    Sub dot_replace()

'first, trim cells
    Range("M1").Select
    ActiveCell.FormulaR1C1 = "=TRIM(RC[-1])"
    Range("M1").Select
    Selection.AutoFill Destination:=Range("M1:M3")
    Range("M1:M3").Select
'copy and paste as values
    Columns("M:M").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'then proceed with replacing
    Columns("M:M").Select
    Selection.Replace What:=".", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

End Sub

希望这对某人有帮助

答案 3 :(得分:0)

我的解决方案,使用循环和替换功能; 输入:“ D”列中的值,数字格式为“ 00.000,00-”,表示负数(表示不带负号的正数); 输出:格式为“ -00000,00”的数字应在“ E”列中;

'i is number of the row
Dim i As Integer
'1 is heading
i = 2
'lastRow in the number of the last row
Do While i <= lastRow
    'store value to be converted as string
    Dim str As String
    'convert from "00.000,00" to "00000,00"
    str = Replace(Range("D" & i).Value, ".", "")
    'myNum: number to be outputed
    'needs to be double, otherwise risk of errors or loss of decimals
    Dim myNum As Double
    myNum = 0

    'check for negative (format "00000,00-"
    If Right(str, 1) = "-" Then
        'remove minus sign
        str = Left(str, Len(str) - 1)
        'convert to double and make negative
        myNum = CDbl(str) * -1
    Else
        'not negative, simply convert do double
        myNum = CDbl(str)
    End If

    'store in the column with the output
    Range("E" & i).Value = myNum
    'continue on the next line
    i = i + 1
Loop

答案 4 :(得分:0)

Sheet1.Range(“ E:E”)。Replace What:=“。”,Replacement:=“”,lookat:= xlWhole,MatchCase:= False