有没有办法将范围的格式复制到数组中?
专注于提出的问题,是的,这是可以做到的。不幸的是,它不能在单行中完成,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)
以单个单元格为例。当然,这假设输入公式的数据已经在工作表中,并且公式已经重新计算。