如果两个其他列匹配,则将值从一列匹配到另一列

时间:2014-12-13 03:25:14

标签: excel excel-vba excel-2010 vba

我有两个列表,其中一个在excel中有其他值,如此,Col2为空

Col1 Col2 Col3 Col4
xyz       xxx  111
xxx       xzy  312 
xzy       xyz  523
...       ...  ...

我想检查Col1和Col3是否匹配,如果Col1和Col3分别匹配Col2上的匹配行,或者至少对齐那些匹配而不弄乱Col3和Col之间的关系,则检查从Col4到Col2的值。

所以我的结果应该是这样的:

Col1 Col2 Col3 Col4
xyz  523  xxx  111
xxx  111  xzy  312 
xzy  312  xyz  523
...  ...  ...  ...

或者我们可以忽略Col2并将其对齐就像这样

Col1 Col2 Col3 Col4
xyz       xyz  523
xxx       xxx  111 
xzy       xzy  312
...       ...  ...

我已经尝试过一些像VLOOKUP这样的东西,但是却失败了。

解决!解决了类似的问题here

1 个答案:

答案 0 :(得分:0)

如果有人想为此使用代码,这里有一些简短的代码来完成OP寻找的两个最终结果选项:

选项1 - 在第2列中放置匹配值

Sub Test()

Dim LastRow As Long
Dim i As Long, j As Long

LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Application.ScreenUpdating = False
With ActiveSheet
    For i = 1 To LastRow
        For j = 1 To LastRow
            If .Cells(j, 3).Value = .Cells(i, 1).Value Then .Cells(i, 2).Value = .Cells(j, 4).Value
        Next j
    Next i
End With
Application.ScreenUpdating = True

End Sub

选项2 - 重新排列第3列和第3列4

Sub Test2()

Dim LastRow As Long
Dim i As Long, j As Long

LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Application.ScreenUpdating = False
With ActiveSheet
    For i = 1 To LastRow
        For j = 1 To LastRow
            If .Cells(j, 3).Value = .Cells(i, 1).Value And j <> i Then
                .Range(.Cells(j, 3), .Cells(j, 4)).Cut
                .Range(.Cells(i, 3), .Cells(i, 4)).Insert
                Exit For
            End If
        Next j
    Next i
End With
Application.ScreenUpdating = True

End Sub

请注意,如果删除第2列,则需要更改对第3列和第3列的引用。 4这个。