将数据从多列返回到一行的最佳方法?

时间:2015-06-15 19:58:59

标签: excel vba excel-vba

我有一张只有订单号的表单,另一张订单号和所有与这些订单号相关的数据。我想匹配订单号并将所有可用数据传输到另一张表中。我一直在尝试使用循环和VLOOKUP,但我遇到了问题(另外我有116列我想传输数据,所以我的vlookup表达式看起来不太好)。任何建议将不胜感激!

这就是我到目前为止所得到的对象错误。 我不认为这是一般的正确方法。

Dim LookUpRange As Range
Dim row As Range
Set LookUpRange = Worksheets("batches").Range("B4:B1384")
Set row = Worksheets("batches").Range("C:DL")
    For Each row In LookUpRange
      row.Select
      Selection.FormulaArray ="=VLOOKUP(RC[-1],OrderLvl!RC[-1]:R[1380]C[113],{2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,207,108,109,110,111,112,113,114,115},FALSE)"
    Next row
End Sub

2 个答案:

答案 0 :(得分:0)

如果您使用小技巧,常规VLOOKUP可能会为您提供所需的内容......

  1. 在数据表上方插入一行,并输入序列号 该行的每个单元格。 (即A1 = 1,B1 = 2,C1 = 3等......)
  2. 在空白的桌子上做同样的事情。
  3. 假设您的第一个订单号位于单元格A2中,请将以下公式放入B2:=VLOOKUP($A2,[other sheet name]!$A$1:$DZ$5000,B$1,0)
  4. 将此公式拖到所有116列中,然后向下拖动所有行。
  5. 显然,您需要调整范围,但请确保您的查找数组从A列开始。(或者,您的数字与数组中第一列的列相同。)添加数字沿着顶部允许您更改您引用的数组的哪一列,只需拖动单元格公式即可。

答案 1 :(得分:0)

请考虑使用此VBA脚本来解决您的问题:

Sub LookupOuput()

    Dim OrderNumberColumn As Range
    Set OrderNumberColumn = Worksheets("batches").Range("B2:B1384")

    Dim LookUpRange As Range
    Set LookUpRange = Worksheets("OrderLvl").Range("C:DL")

    Dim cell As Range
    Dim FindResult As Range

    For Each cell In OrderNumberColumn

        If Not cell.Value2 = Empty Then

            Set FindResult = LookUpRange.Find(what:=cell.Value2)

            If Not FindResult Is Nothing Then
                cell.Range("A1:DJ1").Value2 = LookUpRange.Rows(FindResult.row).Value2
            End If

        End If

    Next cell

End Sub

基本上在第二张纸的第一张纸上搜索每个订单号。此输出(如果搜索项存在)发现该字符串的单元格,我们稍后将其引用其行号以将整行输出到第一个工作表。欢呼声,