0

我有这段代码,它将多个工作簿聚合到一个预览文件中,其中所有数据都清楚地排列在表格和图表中。然后将这些表格和图表粘贴到 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 位数字而忽略其他不重要的数字?

4

1 回答 1

1

有几种方法可以实现这一点。一种方法是强制格式化/可见数据作为实际值。

例如,假设 cellA1包含 value 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),则将其保留为字符串。

于 2012-07-31T15:33:43.883 回答