0

我希望用另一个数据表的最后一列更新一个数据表的最后一列。这是更大的 vba 代码的一部分。第一个表从 A2 扩展到 K 列和“lastpivot1”行。第二个从 A1001 到 K 列和“lastpivot2”行。从表 2 的第一行(row1001)开始,我必须根据单元格 A 到 E 中的值找到表 1 中的等效行。

因此,必须将单元格 A 到 E 或 frow 1001 与第 2 行的单元格 A 到 E 进行比较,然后是第 3 行,然后是第 4 行......直到找到匹配项或直到行“lastrpivot1”。当找到匹配时,K 中的值必须返回到第 1001 行的 K 值。EX:如果第 1001 行的 AtoE 匹配第 65 行的 AtoE,则 copu K65 到 K1001。每个表中的匹配项不应超过 1 个。如果没有匹配,则没有任何东西可以返回。

然后我们从第 1002 行(第二张图表的第二行)重新开始,然后从 1003、1004... 到 lastrpivot2。

我确实使用 vba,但我不知道所有功能。这可能是我无法弄清楚的原因。

谢谢你

4

1 回答 1

0

在 CellK1001中,试试这个:

=IF((A1001&B1001&C1001&D1001&E1001)=(A1&B1&C1&D1&E1),K1,"")

然后向下拖动公式。

这会将整行 1001 与整行 1 进行比较,这就是您所要求的。

如果您打算像 VLOOKUP 一样找到匹配的行(您有点暗示这一点,但不清楚这是您的意图),那么您将需要使用 VBA 来执行此操作。

类似(未经测试):

Sub MatchTables()
Dim tbl1 as Range, tbl2 as Range
Dim var1() as Variant, var2() as Variant, v as Variant
Dim r as Long, matchRow as Long
Set tbl1 = Range("A1:K500") '## Modify as needed
Set tbl2 = Range("A1001:K15001") '## Modify as needed

ReDim var1(1 to tbl1.Rows.Count)
ReDim var2(1 to tbl2.Rows.Count)

'## store the range values, conctaenated, in array variables:
For r = 1 to tbl1.Rows.Count
    var1(r) = tbl1(r,1) & tbl1(r,2) & tbl1(r,3) & tbl1(r,4) & tbl(r,5)
Next
For r = 1 to tbl2.Rows.Count
    var2(r) = tbl2(r,1) & tbl2(r,2) & tbl2(r,3) & tbl2(r,4) & tbl2(r,5)
Next

r = 0
For each v in Var2
    r = r+1
    '## Check to see if there is a  complete match:
    If Not IsError(Application.Match(v, var1, False)) Then
        matchRow = Application.Match(v, var1, False)
        '## If there is a match, return the value from column K in the first table:
        tbl2.Cells(r,11).Value = tbl1.Cells(matchRow,10).Value
    Else:
        tbl2.Cells(r,11).Value = vbNullString
    End If
Next

End Sub
于 2013-06-25T16:04:27.817 回答