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列)