我有 300 多行,包含 40 多列,每列都有一个随机数字 1-40。
我想知道如何在每一行中搜索同时出现的对或数字。
例子。
5 10 12 14 16 17 19 30 31 32 33 40 51
4 7 11 16 17 23 24 26 32 37 39 46 47
1 2 4 7 11 15 18 31 34 35 37 38 43
3 6 14 16 19 21 24 27 33 34 38 42 47
5 7 8 15 17 22 23 24 26 27 30 37 40
我想知道 1 和 2 或者 23 和 24 或者 5 和 30 同时出现的次数。
我该怎么做?我该使用哪个公式以及如何实现它。
我查看了计数、数据透视表、乘积和总计。但我比刚开始时更加困惑。
答案1
由于涉及嵌套,我建议使用用户定义函数(UDF)来解决这个问题。
此代码...
Function CountPairs(theRange As Range, P As Variant, Q As Variant) As Long
Dim PRow As Range
Dim PCell As Range, QCell As Range
Dim Result As Long
' initialize
Result = 0
For Each PRow In theRange.Rows 'search each row for P Value
For Each PCell In PRow.Cells
If PCell.Value = P Then
For Each QCell In PRow.Cells 'if P Value found, search for Q Value
If QCell.Value = Q Then
Result = Result + 1
Exit For
End If
Next QCell
Exit For
End If
Next PCell
Next PRow
' clean up
Set PRow = Nothing
Set PCell = Nothing
Set QCell = Nothing
CountPairs = Result
End Function
产生这些结果...
...我使用条件格式突出显示“P”和“Q”值
但是,有了“辅助”列,就可以使用内置公式来解决......
在这种情况下,辅助列包含填充的此公式...
=IF(COUNTIF($B4:$N4,"="&$B$2)>0,IF(COUNTIF($B4:$N4,"="&$C$2)>0,1,0),0)
单元格 A2 包含一个简单的总和...
=SUM(A4:A8)
答案2
您需要将IF
和结合AND
起来COUNTIF
。
例如,
=IF(AND(COUNTIF(A1:J1,23)>0,COUNTIF(A1:J1,24)>0),1,0)
如果 23 和 24 从 A1 到 J1 至少出现一次,则该解决方案得出 1,如果它们不是同时出现在行中,则该解决方案得出 0。