使用 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 格式化数字的主要内容,如果未能解决你的问题,请参考以下文章