VBA – 将范围的格式复制到数组

我正在创build一个包含多列的报表。 我需要的是,只显示整数,无小数的列应该四舍五入到整数(所以它不仅显示一个舍入的数字,它实际上等于一个整数)。 显示小数点后两位数字的列不应被舍入。

我能做的是:

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

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

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

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

专注于提出的问题,是的,这是可以做到的。 不幸的是,它不能以单线forms完成,例如,可以使用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 ... 

为了举例,假设范围的第一行具有必要的数字格式。

我很好奇你为什么要在工作表上修改一个公式,因为你大概可以在你的代码中做四舍五入的计算,然后把结果值写回到报表的表格中。

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

 ... 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) 

举一个单细胞的例子。 当然,这是假设公式中的数据已经在表格中,并且公式已经被重新计算。