Excel将列与第一列联系起来

时间:2019-03-22 11:44:12

标签: excel vba excel-formula

在我的表中(下面有一个示例),我从每周更改数据的另一张表中导入前两列。我的问题是我想将其他列(例如Age)绑定到第一列。我有一个按钮,可以按此按钮导入前2列,当数据更改(添加其他列或更改顺序)时,其他列中的数据保持不变(例如在导入后,John与Samara更改,年龄将保持不变,而不是针对正确的人)。 用户使用表单时将填充年龄列,因此我不能使用任何VLOOKUP。 我有什么办法可以阻止这种变化?

enter image description here

1 个答案:

答案 0 :(得分:1)

据我了解,您仅导入列A和B,而列C中的信息仅存在于此当前工作簿中。因此,无法将其导入。

如果是正确的话,则需要采取几个步骤。

  1. 保存ID号和年龄之间的链接
  2. 导入数据
  3. 根据保存的信息重置年龄

我采用的方法是使用Dictionary对象,因为它们相对有效,并且在存储键值对时效果很好。在下面的代码中,我将ID保存为键,将Age保存为值。然后,我导入新信息。然后我重新设定年龄。根据您进行导入的方式,您可能可以合并步骤2和3,但这很难在不看代码的情况下说出来。请参见下文,如果您需要其他帮助或信息,请告诉我们。

Sub StoreAgeInformation()
    Dim oDict As Object
    Dim rng As Range 'Range with the ID Primary Key
    Dim rIterator As Range

    'Offset to the ID column (in this case, we are saving the
    'data that is 2 columns to the right
    Const COL_OFFSET As Integer = 2

    Set oDict = CreateObject("Scripting.Dictionary")

    'Change the range to match your data (only need the ID column)
    Set rng = Range("A2:A4")

    For Each rIterator In rng
        'If the ID is not already in the dictionary, then add it
        If Not oDict.exists(rIterator.Value2) Then
            'Add: KEY, VALUE
            oDict.Add rIterator.Value2, rIterator.Offset(, COL_OFFSET).Value2
        End If
    Next rIterator

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' RUN IMPORT CODE HERE
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''

    'Redefine the range in case new rows have been added or deleted
    Set rng = Range("A2:A6")


    For Each rIterator In rng
        If oDict.exists(rIterator.Value2) Then
            rIterator.Offset(, COL_OFFSET).Value2 = oDict(rIterator.Value2)
        Else
            'If a new row, then the age is set to 0
            rIterator.Offset(, COL_OFFSET).Value2 = 0
        End If
    Next rIterator

End Sub