给定Sheet1.ColumnC的任何单元格中存在某个值的情况,将Sheet1.ColumnB的结果返回给Sheet2.ColumnB

时间:2018-11-07 23:00:28

标签: excel vba excel-vba excel-formula

所以我有问题。在Sheet1中,我与此类似,在这里我有多个具有相同(或有时不存在)定义的相同术语的实例:

     Term Name    Definition      Chosen Definition?           
     Account      The account.      
     Account      
     Account      An account name.        x

Sheet2是具有所有唯一术语名称但没有定义的参考表。

    Term Name     Definition
    Account
    Product
    Customer

由于在Sheet1中有很多相同术语的重复项,因此我试图写一些东西,我可以在第三栏中简单地输入“ x”(“选择的定义?”)以标记我选择的定义。 ,它将从Sheet1(在B列)中获取相邻的定义单元格,并将其放入Sheet2的正确位置,如下所示:

    Term Name     Definition
    Account       An account name.
    Product
    Customer

我认为这可以通过组合IF语句,AND语句和VLOOKUP之类的方法来完成,也可以在VBA(我一点也不擅长)中完成。我已经尝试了这两种方法,感觉好像已经接近了一些,但还不完全是。这是我的VBA代码:

    Sub InputData()
        Dim c as Range
        Dim j as Integer
        Dim Source as Worksheet
        Dim Target as Worksheet

        Set Source = ActiveWorkbook.Worksheets("Sheet1")
        Set Target = ActiveWorkbook.Worksheets("Sheet2")

        j = 2
        For Each c in Source.Range("C3:C1000")
            If c = "x"
                Source.Rows(c.Rows).Copy Target.Rows(j)
                j = j + 1
            End If
        Next c
    End Sub

这只是将任何带有'x'的行放在Sheet2开头的C列中:

    Term Name     Definition
    Account       An account name.
    Account
    Product
    Customer

我正接近我拥有的VBA代码吗?我认为公式不会起作用,因为我认为我要查找的内容需要遍历每个单元格才能找到匹配项,但是我不想每次找到匹配项时都添加新行。

1 个答案:

答案 0 :(得分:0)

您可以使用公式。例如,在C2 sheet2中,您的数据如A1:C4 sheet1所示

=INDEX(Sheet1!$B$2:$B$4,MATCH(A2&"x",Sheet1!$A$2:$A$4&Sheet1!$C$2:$C$4,0))

使用 Ctrl + Shift + Enter

输入作为数组公式

enter image description here

您可以使用IFERROR(formula,"")来掩盖所有不匹配项。