excel 十进制数转换VBA

hec6srdp  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(123)

下面是我所拥有的表的一个示例:

当我尝试将整个“I”列除以一个数字时,我得到一个不兼容错误,因为Excel使用逗号而不是小数点。请使用任何一行程序来更改列的格式,而不循环?或任何简单的替代解决方案

brjng4g3

brjng4g31#

根据我的评论,您可以应用Excel的NUMBERVALUE()公式,其中您Assert可能存在小数点:

=NUMBERVALUE(<YourRange>,".")/<YourNumber>

VBA等效项可以是:

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


〉〉

我选择使用Application.Evaluate方法是因为你提到你还需要用一个静态数来划分值。如果你不需要这样做,你可以选择:

With Application
    rng.Value = .Index(.NumberValue(rng, "."),0,1)
End With


〉〉

1bqhqjot

1bqhqjot2#

请尝试下一种VBA方法:

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

上面的代码假设要处理的列是“I:I”,从它的第二行开始,在第一行是表头。如果不同,它会很容易适应它,我想...

nsc4cvqm

nsc4cvqm3#

您只需选择整列,按Ctrl + h,在“查找内容”中输入句点,在“替换为”中输入逗号,按“全部替换”即可,Excel会自动将数值转换为数字。
这是vba的等价物:

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

但这对我没用。
但是,如果您所需要的只是对列中的值执行除法或其他基本算术运算,则这将起作用。

相关问题