如何在Excel中自动填充反向对组合

时间:2019-01-17 21:32:55

标签: excel excel-formula

我有一个如下所示的电子表格:

enter image description here

基于研究,我目前正在将“ Y”和“ N”值手动输入到“值”列中。但是,为了节省时间,我希望为初始配对的值自动填充其反向配对。例如,我将苹果与橙配对为“ Y”。我想用相同的“ Y”值自动填充橙对苹果配对。我曾考虑过进行索引匹配,但没有考虑配对的组合。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我不知道公式,但是这是VBA解决方案-您甚至可以将其转换为Worksheet_Change事件,如果您对列本身进行更改,该事件将不断刷新值。

正如Marc所说-您实际上不应该有一个包含值和公式的混合列(特别是如果它正在读取自身,那么您将遇到递归的问题)。

Option Explicit
Sub PopulateValue()

    Dim i As Long, j As Long

    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row

        If Cells(i, 3).Value = "" Then

            'Look for a true match
            For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
                If i <> j Then
                    If Cells(i, 1).Value = Cells(j, 1).Value And _
                       Cells(i, 2).Value = Cells(j, 2).Value Then
                        If Cells(j, 3).Value <> "" Then
                            Cells(i, 3).Value = Cells(j, 3).Value
                            Exit For
                        End If
                    End If
                End If
            Next j

            'Look for a reverse match
            For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
                If i <> j Then
                    If Cells(i, 1).Value = Cells(j, 2).Value And _
                       Cells(i, 2).Value = Cells(j, 2).Value Then
                        If Cells(j, 3).Value <> "" Then
                            Cells(i, 3).Value = Cells(j, 3).Value
                            Exit For
                        End If
                    End If
                End If
            Next j
        End If
    Next i

End Sub

img1

答案 1 :(得分:1)

这是一个工作表公式。假设标题位于第1行,数据从第2行开始,并且列Entity1Entity2Value中的ABC分别放

=IFERROR(INDEX(C$2:C2,MATCH(B3&"$"&A3,A$2:A2&"$"&B$2:B2,0)),"")

C3中作为数组公式(CTRL-SHIFT-ENTER)并填写。

说明

该公式会像您考虑的那样进行索引/匹配。对于匹配的查找部分,它将Entity2Entity连接到单个字符串中。两个两个实体之间有一个可选的$分隔符(如下所述)。对于匹配项的数组部分,Entity1Entity2由相同的定界符连接在一起。数组从第一个数据行开始,到当前行上方的行结束。

如果匹配返回一个索引,则该索引将与直到当前索引的值数组一起插入INDEX中。如果匹配返回#VALUE错误,则将其包装在IFERROR函数中。

定界符考虑两对Entity1Entity2,第一对为(峰值,峰值),第二对为(峰值,说话)。如果不使用分隔符而将其中任何一个连接起来,则会产生“尖峰”,并可能导致错误的匹配。分隔符防止出现这种情况。您可以选择数据中不会出现的任何字符串作为分隔符。

希望有帮助