Excel将列绑定到第一列

Excel将列绑定到第一列,excel,vba,excel-formula,Excel,Vba,Excel Formula,在我的表中(下面有一个示例),我从另一个每周更改数据的工作表中导入前2列。我的问题是,我想将其他列(如Age)绑定到第一列。我有一个按钮,我按下导入前2列,当数据更改时(添加其他列或更改顺序),来自其他列的数据保持不变(如导入后,John与Samara更改,年龄将保持不变,而不是在正确的人身上)。 年龄列是在用户使用表单时填充的,因此我不能使用任何VLOOKUP。 我能做些什么来阻止这种变化吗 据我所知,您只导入A列和B列,C列中的信息只存在于当前工作簿中。因此,它不能被导入 如果这是正确的,那

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


据我所知,您只导入A列和B列,C列中的信息只存在于当前工作簿中。因此,它不能被导入

如果这是正确的,那么有几个步骤需要采取

  • 保存ID号和年龄之间的链接
  • 导入数据
  • 根据保存的信息重置年龄
  • 我所采用的方法是使用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
    

    人们年龄的数据在哪里?您不应更改包含原始数据(即您提到的表单提供的数据)的工作表。改为另一张工作表。您是否查阅了
    词典
    以将年龄数据链接到正确的姓名?您甚至可以通过连接值将更多列链接到一个名称,然后使用
    split
    函数拆分它们?为什么要导入前两列,看起来您正在更新人员列表,您应该在数据底部添加新人员。一种方法是使用目标ws中的当前数据测试正在复制的数据,如果不在目标ws中,则复制两个单元格并将数据粘贴到目标ws中数据的底部。@GMalc我也在考虑这一点,但我不熟悉VBA,我想可能有一种更简单的方法。你知道我应该如何开始编写代码吗?每次更改时重新导入,这样你就可以确保数据连接到尊敬的所有者了?如果没有合适的示例文件,很难给出可靠的建议