arrays - 在 Excel 中输出数组

标签 arrays vba 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 范围存储到变量数组时,数组会自动调整大小。

经过尝试和测试

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/

相关文章:

arrays - 如何在 Swift Xcode 6.4 的 TableView 中显示 Parse 数组

java - 如何返回数组中出现次数最多的字谜列表?

vba - 如何使用VBA将Word形状保存到图像?

vba - VBA 代码的 HTML Tidy 吗?

arrays - puppet 。迭代 ERB 中的嵌套哈希

java - 成绩簿 Java 程序。帮忙打电话上课吗?

excel - 查找某个范围的列数

c# - 如何从 C# 访问 Excel VBA 中的类模块?

java - 使用 =now() 公式时出现 Apache POI 日期区域设置错误

excel - 如何成功将Excel CSV导入postgreSQL?