VBA – replacestring中的字符

我有1列,它应该包含一个金额,但它有不正确的格式,它被视为文本。

在这里输入图像说明

因此,有必要用点replace点,然后用逗号replace点。 我有代码:

Private Sub Correction_of_dot() Dim i As String Dim k As String i = "." k = "" Columns("P:P").Replace what:=i, replacement:=k, lookat:=xlPart, MatchCase:=False End Sub Private Sub Correction_of_comma() Dim i As String Dim k As String i = "," k = "." Columns("P:P").Replace what:=i, replacement:=k, lookat:=xlPart, MatchCase:=False End Sub 

但它没有任何…没有错误,只是加载,然后什么也没有发生。 你能告诉我,我做错了什么,或者我可以做得更好吗?

非常感谢!

按照我的区域设置,Dot用作小数点分隔符,逗号用作千位分隔符。 话虽如此,下面的代码为我工作,并产生预期的输出。

为了testing代码,我复制了网页上的数字并粘贴在表单上,​​如下所示:

在这里输入图像描述

码:

 Sub Test() With Range("P:P") .Replace ".", "" .Replace ",", "." .NumberFormat = "0.00" End With End Sub 

输出:

在这里输入图像说明

尝试使用这个。 代码首先更改您的语言以匹配您的列中的小数点分隔符。 这使得Excel将它识别为一个以文本forms存储的数字。 然后使用text to columns来将范围转换为数字,然后将小数点(和千位)分隔符重置为它们应该保留的数字 – 将数据保存为数字

 Sub CorrectIncorrectNumberFormat() With Application .UseSystemSeparators = False .DecimalSeparator = "," .ThousandsSeparator = "." End With 'Update to your applicable range I've set it to sheet1 Column A With Sheet1 With Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)) .TextToColumns Destination:=.Cells(1), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 1), TrailingMinusNumbers:=True End With End With With Application .DecimalSeparator = "." .ThousandsSeparator = "," .UseSystemSeparators = True End With End Sub 

你的代码适合我, 如果它不起作用,我认为该列被格式化为文本; 只需将格式更改为数字或标准。

尝试这个:

 Private Sub Correction_of_dot() Columns("P:P").Select Selection.NumberFormat = "General" Dim i As String Dim k As String i = "." k = "" Columns("P:P").Replace what:=i, replacement:=k, lookat:=xlPart, MatchCase:=False i = "," k = "." Columns("P:P").Replace what:=i, replacement:=k, lookat:=xlPart, MatchCase:=False End Sub 

这是一个方法来做到这一点:

 Public Sub TestMe() Debug.Print generateNumber("1.525,32") 'works with mixed formats: Debug.Print generateNumber("12,525.33") Debug.Print generateNumber("1,112.525,35") End Sub Public Function generateNumber(strInput As String) As Double strInput = Replace(Replace(strInput, ".", ""), ",", "") generateNumber = CDbl(Left(strInput, Len(strInput) - 2)) 'getting the first digit after the comma generateNumber = generateNumber + 0.1 * CLng(Mid(strInput, Len(strInput) - 1, 1)) 'getting the second digit after the comma generateNumber = generateNumber + 0.01 * CLng(Mid(strInput, Len(strInput), 1)) End Function 

如果input是标准的,在整数之后有两位数字,它将返回一个标准输出。

它在格式上有一个小的优势,因为在不同的国家,分隔符是不同的。

简单的解决scheme,不需要macros的干预是select与文本值列,转到Data选项卡==> Text to Columns ==>下一个==>下一个==>selectGeneral列数据格式。

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

您也可以告诉Excel如果逗号是十进制或千位分隔符(在高级选项下)…

在这里输入图像说明

您可以遍历列并使用replacefunction。

 Dim i As Long Dim finalRow As Long finalRow = SheetX.Cells(Rows.Count, 1).End(xlUp).Row For i = 1 to finalRow SheetX.Cells(i, 1).Value = Replace(SheetX.Cells(i, 1).Value, ".", "") SheetX.Cells(i, 1).Value = Replace(SheetX.Cells(i, 1).Value, ",", ".") Next i 

注:我没有testing这个 – 但它应该工作。 另外:将SheetX更改为适合CodeName的任何表单,并根据需要更改列参考(本例中的第1列)