我有这个代码将多个工作簿聚合到一个预览文件中,其中所有数据都清楚地列在表格和图表中。然后将这些表格和图表粘贴到PowerPoint演示文稿中。
当表格中的值被复制到PowerPoint幻灯片时,我遇到了使格式正确的问题。其中一个源工作表输出的值如847389.240398230423,当您尝试将其放在PowerPoint中时,会得到一个占用太多行的值,看起来像2.240398230423E-02。在任何会议中,这种格式都不会很好。
我写了一些代码,这些代码会在值在预览工作簿中编辑代码
Sheets("Output").Select
'Select1
Range("C10:H15").Select
Selection.NumberFormat = "0.000"
'Select2
Range("C17:H17").Select
Selection.NumberFormat = "0.000"
'Select3
Range("C18:H19").Select
Selection.NumberFormat = "0.00"
'Select4
Range("C20:H21").Select
Selection.NumberFormat = "0.00"
这段代码非常适合我需要的数据,并且显示为0.487,但是单元格中的实际值是0.487682742490,我认为这是代码在更新PowerPoint演示文稿时所识别的内容。
有没有办法可以编写一些代码,只能取小数点后的前2位或3位数,而忽略其他非重要数字?
答案 0 :(得分:1)
有几种方法可以实现这一目标。一种方法是强制格式化/可见数据作为实际值。
例如,假设单元格A1
包含值1.234
。使用此代码:
ActiveSheet.Range("A1").NumberFormat = "0.0"
ActiveSheet.Range("A2").Value = ActiveSheet.Range("A1").Value
ActiveSheet.Range("A3").Value = ActiveSheet.Range("A1").Text
结果如下:
A1
包含值1.234
,但显示为1.2
A2
包含值1.234
,并显示为1.234
A3
包含值1.2
,并显示为1.2
单元格的.Text
属性基本上是您在单元格中看到的。一旦您以这种方式转换价值,转移到PP应该按预期工作。
或者(虽然不是首选,因为它使用起来有些麻烦,需要字符串,而不仅仅是坚持使用值),你可以使用这样的东西:
Dim s As String
Dim dec As Integer
dec = 2
s = CStr(ActiveSheet.Range("A1").Value)
ActiveSheet.Range("A3").Value = CDbl(Left(s, InStr(s, ".")) & Left(Right(s, Len(s) - InStr(s, ".")), dec))
在上文中,您可以通过增加dec
的值来扩展小数位数。但是,如果不进行进一步修改,1.000
将显示为1
(删除可能显着的0)。
如果您使用此方法,您可以保留数值(使用CDbl()
)或将其保留为字符串,如果您不需要执行任何算术(即只是放入PP)。