在Excel中输出一个数组
我将以下代码拼凑在一起,以便可以修剪工作表中每个单元格的前导和尾随空格。 为了保持表格属性,我需要确保我不会弄乱标题行。 当我运行这个时候,除了标题行之外,所有东西都被删除 我究竟做错了什么?
这是我第一次处理数组。 当我尝试没有数组的代码将需要一段时间来读取和重写工作表中的每个单元格。 数组速度快了很多,我只是不明白如何使用它。
Dim arrData(), arrReturnData() As Variant Dim rng As Excel.Range Dim i, j, lRows, lCols As Long Set rng = ActiveSheet.UsedRange Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) 'don't mess with the header row arrData = rng.Value lRows = rng.Rows.Count lCols = rng.Columns.Count ReDim arrData(1 To lRows, 1 To lCols) ReDim arrReturnData(1 To lRows, 1 To lCols) For j = 1 To lCols For i = 1 To lRows arrReturnData(i, j) = Trim(arrData(i, j)) Next i Next j rng.Value = arrReturnData Set rng = Nothing
你正在分配
arrData = rng.Value
然后调整它。 因此所有的价值都消失了。
顺便说一句,你根本不需要ReDim arrData(1 To lRows, 1 To lCols)
。 将excel范围存储到variables数组时,数组会自动resize。
尝试和testing
Option Explicit Sub Sample() Dim arrData(), arrReturnData() As Variant Dim rng As Excel.Range Dim i, j, lRows, lCols As Long Set rng = ActiveSheet.UsedRange Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) lRows = rng.Rows.Count lCols = rng.Columns.Count ReDim arrReturnData(1 To lRows, 1 To lCols) arrData = rng.Value For j = 1 To lCols For i = 1 To lRows arrReturnData(i, j) = Trim(arrData(i, j)) Next i Next j rng.Value = arrReturnData Set rng = Nothing End Sub
使用保留
Redim Preserve arrData(1 To lRows, 1 To lCols)