使用 VBA 格式化数字

Posted

技术标签:

【中文标题】使用 VBA 格式化数字【英文标题】:Formatting numbers using VBA 【发布时间】:2017-12-19 14:05:26 【问题描述】:

我录制了一个宏来将 csv 文件转换为列。 我无法用数字格式化两列。我尝试记录几个场景并添加不同的命令。

数据如下:

格式化前

格式化后

我的代码适用于文本到列:

Selection.TextToColumns Destination:=Range("A1"),DataType:=xlDelimited, _
  TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
  Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
  :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5,   1), Array(6, 1), _
  Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True
Columns("E:F").Select
Selection.Replace What:=".", Replacement:=","

我尝试在使用键盘快捷键格式化单元格的同时进行录制,并尝试编写一些代码;除其他外:

'NumberFormat = "#.##0,00"

Columns("E:F").Value = Columns("E:F").Value

With Range("E:F")
    .NumberFormat = "0"
    .Value = .Value
End With

我正在研究丹麦语键盘。

【问题讨论】:

您应该能够使用宏记录器来捕捉您应用数字格式的情况希望。忽略代码方面,您是否能够以您想要的方式格式化工作表中的数字?另外,我无法从图片中真正解决问题,但看起来像是某种“像素化”? 谢谢 QHarr。是的,我尝试过记录不同的转换方法,但再次运行宏时它们仍然不起作用。 【参考方案1】:

尝试使用.value=val(.value)而不是.Value = .Value,如果不起作用,请将格式行更改为.NumberFormat = "General",如果不起作用,则需要逐个循环单元格并将其转换为数字,下面的代码肯定会工作。

Sub ConvertTextToNumbers()
    Dim rng As Range
    Dim cell As Range
    Dim WS As Worksheet

    Set WS = ActiveSheet 'change as needed

    On Error Resume Next
    Set rng = UsedRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If Not rng Is Nothing Then
        For Each cell In rng
            If IsNumeric(cell.Value) Then
                cell.NumberFormat = "General"
                cell.Value = Val(cell.Value)
            End If
        Next cell
    End If
End Sub

【讨论】:

感谢伊博您的评论。这仍然不起作用。我认为这可能与 wondows 设置或我的本地设置有关。 您可以上传您的工作簿或数据样本吗?我相信它会起作用【参考方案2】:

代替

.Value = .Value

使用

.TextToColumns

例子:

Columns("A:A").NumberFormat = "General"
Columns("A:A").TextToColumns

这立即适用于整个范围,不需要逐个单元格地循环运行。

【讨论】:

以上是关于使用 VBA 格式化数字的主要内容,如果未能解决你的问题,请参考以下文章

vba怎么存储17位数字

在 Excel VBA 中更改为加拿大 (CDN) 法语数字格式

excel vba:列列表的数字格式

如何用vba将文本数字改为数值?

EXCEL VBA:根据值范围格式化现有数字单元格

使用VBA为负数设置带有千位分隔符、2位小数和减号的标准数字格式?