在A列中的项目的B列中至少找到一次值时返回一些内容

时间:2015-07-01 10:20:17

标签: excel vba excel-vba

我正在寻找解决以下问题的ab Excel公式:

我在A列和B列中列出了与每个帐户关联的收费方法列表。一个帐户可以有一些相关的收费方法 - 例如:

Account no  Charge method
A1  IC1
A1  IC2
A1  Exempt
A2  IC1
A2  IC2
A3  IC1
A3  IC2
A3  IC3
A3  Exempt
A4  IC1
A4  IC2
A4  Exampt

我想指定哪个帐户至少有一种收费方式"免除"。例如:在C列值中"豁免"如果是A1账号"免除"在B列中至少提到过一次。我尝试使用vlookup TRUE,但我不确定它是否总是准确的。

4 个答案:

答案 0 :(得分:2)

这个简单的公式没有任何辅助列或VBA:

=IF(SUM(--($A$2:$A$13=A2)*($B$2:$B$13="Exempt"))>0,"Exempt","")

使用 Ctrl Shift 输入作为数组公式输入,然后向下复制。

enter image description here

注意:

  • $A$2:$A$13=A2返回包含{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
  • 的数组
  • $B$2:$B$13="Exempt"的相同想法:它返回{FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE}
  • --将布尔值TRUE / FALSE转换为1/0。
  • 使用*将这些1和0相乘相当于对应布尔值的逻辑AND;结果是{0;0;1;0;0;0;0;0;0;0;0;0}
  • 如果该数组的总和大于零,则表示您已匹配。

答案 1 :(得分:2)

我们得出的结论是,给定示例的最简单的公式是这样的: = IF(COUNTIFS(A:A,A2,B:B,“豁免”),“豁免”,“”)

谢谢大家的意见!

答案 2 :(得分:1)

下面的设置将输出:

Account no  Charge method  
A1          IC1            Exempt
A1          IC2            Exempt
A1          Exempt         Exempt
A2          IC1            
A2          IC2            
A3          IC1            Exempt
A3          IC2            Exempt
A3          IC3            Exempt
A3          Exempt         Exempt
A4          IC1            Exempt
A4          IC2            Exempt
A4          Exempt         Exempt

如果在A中存在具有相应帐号的行,并且在列B中存在“豁免”,则我将第三列设置为“豁免”;如果没有,则为空白。

如果我误解了这个问题,请纠正我。

使用以下公式创建列C:

=A1&" "&B1

尽可能将其向下拖动整列。

隐藏C列。然后使用

创建D列
=IF(COUNTIF(C:C,A1& " Exempt")>0,"Exempt","")

答案 3 :(得分:0)

你可以尝试这个vba解决方案,它希望帐户/收费方法在A / B列中,它将填入D列

Sub t()

'change activesheet to sheets("NAME OF SHEET") if needed
With ActiveSheet

    'If list is not empty, clear it
    If .Range("D2").Value <> "" Then
        .Range("D2:" & .Range("D1").End(xlDown).Address).ClearContents
    End If

    For Each cell In .Range("A2:" & .Range("A2").End(xlDown).Address)

        'if exempt found
        If cell.Offset(0, 1).Value = "Exempt" Then

            'If list is empty, start list
            If .Range("D2").Value = "" Then
                .Range("D2").Value = cell.Value
            Else
                'is account already in list
                Found = 0
                For Each c In .Range("D1:" & .Range("D1").End(xlDown).Address)
                    If c.Value = cell.Value Then
                        Found = 1
                    End If
                Next

                'If not in list, add it
                If Found = 0 Then .Range("D1").End(xlDown).Offset(1, 0).Value = cell.Value
            End If
        End If
    Next
End With

End Sub