使用满足4个条件

时间:2016-03-30 11:01:19

标签: excel vba excel-vba

我已经查看了几个主题并且有一些涉及到我的问题,但是,我从未使用过VBA并且不知道如何更改编码以适应我的问题。

我想从表1中覆盖表2中的数据行,提供A,B,C和A列中的数据。 D(实时数据起始行2)是纸张1和1上的匹配。 2。

本质上,工作表2是我的数据存储,而工作表1是工作表2的模板。前四列中的所有可能的数据组合已经存在于工作表2中,其余数据未知。因此,当我获得未知数据时,我想覆盖第2页中的那一行。

很多人已经制作了关于在一列中搜索一个特定术语的位置复制行的线程,而我将有许多不同的术语要搜索,但正如我所说,他们需要匹配两张纸。

希望我有道理!请帮忙!

1 个答案:

答案 0 :(得分:0)

您可以使用公式而不是使用VBA来执行此操作。

如果没有标题,请将此公式粘贴到sheet1的单元格E1中:

=IF(AND(A1=INDEX(Sheet2!A:A,MATCH(A1,Sheet2!A:A,FALSE)),B1=INDEX(Sheet2!B:B,MATCH(B1,Sheet2!B:B,FALSE)), C1=INDEX(Sheet2!C:C,MATCH(C1,Sheet2!C:C,FALSE)),D1=INDEX(Sheet2!D:D,MATCH(D1,Sheet2!D:D,FALSE))),INDEX(Sheet2!E:E,MATCH(A1,Sheet2!A:A,FALSE)),"NO")

如果你有一个标题行,那么这个进入E2:

=IF(AND(A2=INDEX(Sheet2!A:A,MATCH(A2,Sheet2!A:A,FALSE)),B2=INDEX(Sheet2!B:B,MATCH(B2,Sheet2!B:B,FALSE)), C2=INDEX(Sheet2!C:C,MATCH(C2,Sheet2!C:C,FALSE)),D2=INDEX(Sheet2!D:D,MATCH(D2,Sheet2!D:D,FALSE))),INDEX(Sheet2!E:E,MATCH(A2,Sheet2!A:A,FALSE)),"NO")

然后使用单元格右下角的小切换将其拖动到sheet1之间,因为您希望列从sheet2进入。

然后突出显示刚刚创建的整行,并将右下方的小切换拖到工作表的尽可能远处(或尝试双击切换以自动填充)。

我在一小组数据上尝试了这一点,它似乎有效,所以它应该适用于您的大型数据集,只要sheet1上的4列的所有可能变体都可用于sheet2,并在以下列中包含相关数据。

如果在任何单元格中得到“NO”的结果,则Excel无法在sheet2中找到与sheet1上的行完全匹配的行。

编辑 - 下面的更新答案。

试试这个,这更有可能适合你。

Sub CopyItOver()

Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")

    For Each c1 In sh1.Range("A1", sh1.Range("A1").End(xlDown))
        For Each c2 In sh2.Range("A1", sh2.Range("A1").End(xlDown))
            If c2.Value = c1.Value Then
                If c2.Offset(0, 1).Value = c1.Offset(0, 1).Value Then
                    If c2.Offset(0, 2).Value = c1.Offset(0, 2).Value Then
                        If c2.Offset(0, 3).Value = c1.Offset(0, 3).Value Then
                            c1.EntireRow.Value = c2.EntireRow.Value
                        End If
                    End If
                End If
            End If
        Next c2
    Next c1

End Sub