1

我正在创建一个包含多列的报告。我需要的是只显示整数而不显示小数的列应该四舍五入到整数(这样它不仅显示一个四舍五入的数字,它实际上等于一个整数)。显示小数点后有两个数字的列不应四舍五入。

我能做的是:

If c.NumberFormat = "#,##0_);(#,##0)" Then
    c.Formula = "=round(" & Right(strFormula, Len(strFormula) - 1) & ",0)"
End If

但是,我将整个报告放在一个数组中,我只想将整个数组粘贴到工作表中,而不是一次粘贴一个单元格。我也不想根据单元格格式处理和舍入每个单元格,而是我想复制报告将进入数组的范围的格式,并从数组中工作。我相信这将减少几秒钟的过程。

有没有办法将范围的格式复制到数组中?

4

1 回答 1

4

有没有办法将范围的格式复制到数组中?

专注于提出的问题,是的,这是可以做到的。不幸的是,它不能在单行中完成,myArray = Range("A2:F25")例如,可以将范围的值分配给带有 的数组。(另请参见 brettdj 的评论。)相反,您需要以下内容:

Dim rng as Range
Dim formatArray() As String
Dim i as Long, j as Long
Set rng = Range(A2:F20)    'or whatever the range is
Redim formatArray(1 to rng.Rows.Count, 1 to rng.Columns.Count)
For i = 1 to rng.Rows.Count
    For j = 1 to rng.Columns.Count
        formatArray(i, j) = rng.Cells(i, j).NumberFormat
    Next
Next
...

不过,有几点观察:

实际上,您只需要知道范围内单行的格式,因为大概一列中的数字格式不会在列中更改。

这会将代码简化为:

...
Redim formatArray(1 to rng.Columns.Count)
For i = 1 to rng.Columns.Count
    formatArray(i) = rng.Cells(1, i).NumberFormat
Next
...

例如,假设该范围的第 1 行具有必要的数字格式。

我很好奇您为什么要修改工作表上的公式以使其四舍五入,因为您可能可以在代码中进行四舍五入计算,然后将结果值写回工作表以供报告。

如果您需要将数字格式应用于您正在写入工作表的值(不仅仅是修改公式以便它们生成整数),可以一次对范围内的整个列执行此操作,即

...
For i = 1 to rng.Columns.Count
    rng.Columns(i).NumberFormat = formatArray(i)
Next
...

如果您需要将单元格公式的结果转换为舍入值,您可以使用类似

rng.Cells(2, 5).Value = WorksheetFunction.Round(rng.Cells(2, 5).Value, 0)

以单个单元格为例。当然,这假设输入公式的数据已经在工作表中,并且公式已经重新计算。

于 2013-07-01T06:05:52.767 回答