我将以下代码拼凑在一起,以便可以修剪工作表中每个单元格的前导和尾随空格。为了保留表属性,我需要确保不会弄乱标题行。当我运行此命令时,除标题行之外的所有内容都被删除。我做错了什么?
这是我第一次处理数组。当我在没有数组的情况下尝试此操作时,代码将需要一段时间来读取和重写工作表中的每个单元格。数组要快得多,我只是不明白如何使用它。
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 范围存储到变量数组时,数组会自动调整大小。
经过尝试和测试
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
关于arrays - 在 Excel 中输出数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664014/