首页 > 解决方案 > Excel VBA 将新行插入数组

问题描述

我有一个二维数组,我想在数组中间的某个行号处插入一些行。

数组已经有现有的信息,所以如果我想简单地将新信息放在中间,ReDim Preserve 就不能很好地工作。

有任何想法吗?

标签: arraysexcelvbainsertrow

解决方案


假设有两个基于 1 的2-dim 数据字段输入,我演示了 @FaneDuru 的有效方法的替代方法,该方法使用单独的组合列表创建作为数据容器,并允许通过 now disponible.AddItem 方法进行简单的项目插入。

请注意,当然这种方法可以在许多方面进行改进,例如通过允许输入数组的不同索引基数。-有条不紊的提示:分配从零开始的组合的.Column属性(即倒置的.List道具)并将其转回允许在这里重新获得输入数组的原始从一开始的索引,因为它ReDim Preserve会失败(它只能重新调整最后一个维度)

Sub AddElement(datafield, ByVal rowNum As Long, newData)
'Note: assumes 1-based 2dim input arrays with same column counts
'create zero-based combo container on the fly
With CreateObject("Forms.ComboBox.1")
    .list = datafield     ' assign datafield to zero-based list elems
    .AddItem , rowNum - 1 ' add Null values to zero-based list index
    'assign new data to each zero-based list column
        Dim col As Long
        For col = LBound(newData, 2) To UBound(newData, 2)
            .list(rowNum - 1, col - 1) = newData(1, col)
        Next col
    'overwrite original datafield with transposed list values to regain 1-based elems
    datafield = Application.Transpose(.Column)    ' overwriting data (with zerobased dimensions)
End With

End Sub

由于datafield参数通过引用 ( ByRef) 隐式传递,原始数据输入将被覆盖。

插入新的第二行的示例调用

Dim data:    data = Sheet1.Range("A1:C4").Value
Dim newData: newData = Sheet2.Range("A1:C1").Value
AddElement data, 2, newData

推荐阅读