VBA比较列表返回更新后的值

时间:2016-12-20 23:33:30

标签: excel vba excel-vba

这种情况伴随着我在VBA Check Row For Value Then Another Value and Paste If True回答的问题。我正在寻找类似线程的东西,但规模更大。

使用零件和价格表我有两张常量纸张,MAIN和LIQUIDATION。这两张纸具有商品SKU的主列表。你可以在下面看到截图。 Master List Layout

LIQUIDATION表具有相同的布局,但具有一组不同的主SKU。然后我有一个"工作"表格,目前名为UPDATES,我用它作为一种着陆垫,用于我从中提取更新的地方。我手动格式化UPDATES表格取决于我从哪里取出它以及它上面的信息。有时我只需要更新定价,这样我就可以复制一个数据集,该数据集只包含具有更新定价的SKU列表。其他时候我可能会提到标题或描述。您可以在下面的UPDATES表中查看我当前的数据集。 Sample Update Data

此更新数据可能包含也可能没有SKU的完整列表。有时它只需要更新4个部分。其他时候它可能有100个。有时数据集通常可能不同,因为图像的部件和链接的描述位于定价的其他位置。

我想要做的是使用UPDATES表更新两个主列表。它应该匹配主工作表上第一列的SKU和数据集工作表中第一列的SKU,并根据数据集中的数据填写以下列。因此,两张主表将填充数据集表中的数据,并且将来两张主表将使用数据集表中的数据进行更新。

我已经能够通过复制VLOOKUP功能手动获得边际结果,但我也希望能够将以后的更改包含在SKU的主表单列表中(如果部件被添加或从MAIN减去或移动到LIQUIDATION)。

编辑:我一直在以=VLOOKUP("01-1129-12",UPDATES!$A$2:$A$999,2,FALSE)的形式玩VLOOKUP,然后只是向下/向下复制列表中的每个部分。

我所知道的(或者我认为)是数据集表中行中的数据需要输入一组信息。然后,如果找到匹配的部件号,则可以使用阵列数据填写主表上的列表。 SKU始终是主键,工作表上的布局将保持不变,但两张主表上的SKU列表可能会发生变化,数据集中的信息量可能会发生变化,但始终会有一个列表SKU用作选择器。在仅需要更新定价或描述的情况下,数据集也可能在一行中具有空白项目(不具有新数据的单元格将是空白的,并且没有更新信息的SKU将是被完全排除在数据集之外)。

编辑:问题是,有没有办法以编程方式使用VBA并实现将UPDATES表单上所有相应单元格中的数据拉入两张主表单上相应行/单元格的完整结果?或者说,我知道可以做到。我只是不知道我应该走向何方或方向。

更新:好的,我大致没有使用VLOOKUP寻找的东西。我怀疑这是最有效的方式,我必须继续添加它以适应其他工作表,但它正在工作:

    Sub mainUpdater()
    Dim SourceRow As Long
    Dim DestRow As Long

    ScreenUpdating = False

    For DestRow = 2 To 650
          For SourceRow = 2 To 650

                If VBA.Trim(VBA.UCase(Sheets("MAIN").Cells(DestRow, 1))) = VBA.Trim(VBA.UCase(Sheets("UPDATES").Cells(SourceRow, 1))) Then
                Sheets("MAIN").Cells(DestRow, 2) = Sheets("UPDATES").Cells(SourceRow, 2)
                Sheets("MAIN").Cells(DestRow, 3) = Sheets("UPDATES").Cells(SourceRow, 3)
                Sheets("MAIN").Cells(DestRow, 4) = Sheets("UPDATES").Cells(SourceRow, 4)
                Sheets("MAIN").Cells(DestRow, 5) = Sheets("UPDATES").Cells(SourceRow, 5)
                Sheets("MAIN").Cells(DestRow, 6) = Sheets("UPDATES").Cells(SourceRow, 6)
                Sheets("MAIN").Cells(DestRow, 7) = Sheets("UPDATES").Cells(SourceRow, 7)
                Sheets("MAIN").Cells(DestRow, 8) = Sheets("UPDATES").Cells(SourceRow, 8)
                Sheets("MAIN").Cells(DestRow, 9) = Sheets("UPDATES").Cells(SourceRow, 9)
                Sheets("MAIN").Cells(DestRow, 10) = Sheets("UPDATES").Cells(SourceRow, 10)
                      GoTo NextDestRow
                End If
          Next SourceRow

    NextDestRow:
    Next DestRow

    ScreenUpdating = True

    End Sub

0 个答案:

没有答案