我的列中包含数字(格式为常规),如下所示
| 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 |
| ... |
我不明白发生了什么,因为细胞的格式保持一般,任何线索都知道为什么会发生这种情况。谢谢!
答案 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)
'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