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)
举一个单细胞的例子。 当然,这是假设公式中的数据已经在表格中,并且公式已经被重新计算。