首页 > 解决方案 > 在多维数组中插入数据

问题描述

我必须将输入文件中的数据移动到另一个工作簿。数据在工作表中作为硬编码输入结构化,如下所示,其中包含所有标识符的列是一个名为“INPUT_MARKER”的命名范围。

    IQ_SALES    100     200     300
    IS_MARGIN    20      30      40
    IQ_EBITDA    50      30      20

我只需要移动一些数据。因此,例如在上面我只需要移动 IQ_SALES 数据和 IQ_EBITDA 数据。所以我需要了解如何创建一个仅包含所需数据的数组。

下面的代码将 INPUT_MARKER 列中的数据与名为“identifierArray”的数组中的元素进行比较,然后我打算将所有行数据插入名为“bigDataArray”的多维数组中。我尝试了几种方法,但无法完成这项工作。非常感谢任何帮助。我在下面省略了一些冗余代码,因此只包含与此问题有关的代码。

    Sub Update()

    Dim identifierArray(), bigDataArray() As Variant

    Application.ScreenUpdating = False
    Application.CutCopyMode = False

    'Definition of the array of data that is to be transferred to the targetModel
    identifierArray = Array("IQ_SALES", "IQ_EBITDA")
    ReDim bigDataArray(1 To UBound(identifiersArray))

    With Workbooks(sourceModel).Sheets("DATA")
        For Each c In .Range("INPUT_MARKER")
            For Each element In identifierArray
                If element = c.Value Then
                    'To construct bigDataArray by inserting row data every time element equals c.Value

                End If
            Next element
        Next c
    End With

    End Sub

标签: excelvba

解决方案


我最近处理了一个类似的问题。从事物的外观来看,这可以通过多维数组来处理

虽然作为一个倾向,我建议检查动态多维数组的参考

Private Sub fill_array()

    Dim arr() As String
    Dim i As Integer: i = 0
    Dim cell As Range
    Dim ws As Worksheet: Set ws = Sheets("DATA")

    For Each cell In ws.Range("INPUT_MARKER")
        If ws.Cells(cell.Row, 1) = "IQ_SALES" Or ws.Cells(cell.Row, 1) = "IQ_EBITDA" Then
            ReDim Preserve arr(0 To 2, i)
            arr(0, i) = ws.Cells(cell.Row, 2)
            arr(1, i) = ws.Cells(cell.Row, 3)
            arr(2, i) = ws.Cells(cell.Row, 4)
            i = i + 1
        End If
    Next cell
End Sub

因此,您的数组将具有 的结构arr(x, y),其中:

  • x - [0;2]- 将是您要存储的 3 列数据
  • y - n- 数组的索引(只有IQ_SALESIQ_EBITDA被添加)

编辑:

这当然是假设,你的数据“ INPUT_MARKER”开始于 ColumnA

另外作为一个额外的提示,如果您还想存储数组源的信息 - 类似于主键,您可以增加第一个维度

ReDim Preserve arr(0 to 3, i)
arr(3, i) = cell.Row              ' edited (instead of arr(3)= …)

并使用示例cell.Row作为从何处获取数据的参考,以便反向跟踪数据


推荐阅读