arrays - Excel VBA 将新行插入数组
问题描述
我有一个二维数组,我想在数组中间的某个行号处插入一些行。
数组已经有现有的信息,所以如果我想简单地将新信息放在中间,ReDim Preserve 就不能很好地工作。
有任何想法吗?
解决方案
假设有两个基于 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
推荐阅读
- android - 如何让 ESP8266 在外部 IP 上工作?
- ide - WebStorm 转向双重指导方针
- javascript - 将数据放入 prop 使其看起来整洁 Vue.js
- c - 如果指针作为大小传入,为什么 malloc 会覆盖先前的分配?
- python - 有 Python GDTF 模块吗?
- eclipse - 用于一般文档生成的 m2doc
- firebase - Google Firebase 身份验证多次
- gitlab - Gitlab CI:仅替换:*allowed_branches 规则:
- amazon-web-services - 如何使用标签从 Glacier 恢复 S3 对象
- python - 如何为我的员工组织健康检查(使用 python 代码的 Docker)?