Sub Test()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim lr As Long: lr = ws.Range("I" & ws.Rows.Count).End(xlUp).Row
Dim rng As Range: Set rng = ws.Range("I2:I" & lr)
Dim nr As Long: nr = 5
rng.Value = Application.Evaluate("=NUMBERVALUE(" & rng.Address & ",""."")/" & nr)
End Sub
Sub ChangeDecimalSep()
Dim ws As Worksheet, rng As Range, lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Range("I" & ws.rows.count).End(xlUp).Row
Set rng = ws.Range("I2:I" & lastRow)
With rng
.replace ".", ",", xlPart
.NumberFormat = "General"
.Value = .Value
End With
End Sub
Sub periodToComma()
Dim targetRange As Range
Set targetRange = Columns("A:A")
targetRange.Replace What:=".", Replacement:=Application.DecimalSeparator, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
但是由于某种原因,这并不能将值转换为数字。有一些解决方案可以使用,比如添加
With targetRange
.NumberFormat = "General"
.Value = .Value
End With
3条答案
按热度按时间brjng4g31#
根据我的评论,您可以应用Excel的
NUMBERVALUE()
公式,其中您Assert可能存在小数点:VBA等效项可以是:
〉〉
我选择使用
Application.Evaluate
方法是因为你提到你还需要用一个静态数来划分值。如果你不需要这样做,你可以选择:〉〉
1bqhqjot2#
请尝试下一种VBA方法:
上面的代码假设要处理的列是“I:I”,从它的第二行开始,在第一行是表头。如果不同,它会很容易适应它,我想...
nsc4cvqm3#
您只需选择整列,按Ctrl + h,在“查找内容”中输入句点,在“替换为”中输入逗号,按“全部替换”即可,Excel会自动将数值转换为数字。
这是vba的等价物:
但是由于某种原因,这并不能将值转换为数字。有一些解决方案可以使用,比如添加
但这对我没用。
但是,如果您所需要的只是对列中的值执行除法或其他基本算术运算,则这将起作用。