Excel:遍历列数组以在不同的列数组和对数组中查找重复值

时间:2018-06-15 14:41:14

标签: arrays excel

第一列对应于单个进程,第二列是进入该进程的组件。我希望有一个循环可以检查所有进程并评估其他进程具有相同的单个组件。最后,我想要一个循环来查找哪些流程有50%或更多的组件与另一个流程的50%或更多匹配。

例如,进程1有4个与进程2共同的组件,因此它们有超过50%的组件配对,所以我希望有一个函数来识别这个进程配对。过程1和3也是如此。

Process Comp.
1       511
1       233
1       712
1       606
1       4223
1       123
1       456
2       511
2       233
2       606
2       4223
2       222
2       309
2       708
3       309
3       412
3       299
3       511
3       712
3       222
3       708

我觉得我可以在python中使用网络库,或者可以在matlab中使用迭代功能运行它,但是我需要在excel中执行它,而且我是excel编码的新手,所以任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:1)

假设数据设置如此,并按过程编号排序,如您提供的样本数据所示:

enter image description here

在单元格F2中使用此公式并向下复制:

=SUMPRODUCT(COUNTIFS(A:A,D2,B:B,INDEX(B:B,MATCH(E2,A:A,0)):INDEX(B:B,MATCH(E2,A:A,0)+COUNTIF(A:A,E2)-1)))/COUNTIF(A:A,D2)

然后,您可以使用条件格式转换F列中大于50%绿色的单元格,以便于阅读。

答案 1 :(得分:1)

如果不能选择排序,请使用此选项:

     With ("C2:C" & 1row)
        Do
        Set rngFind = .Find(What:="CY*", After:=.Cells(1, 1), LookIn:=xlFormulas, _
                            LookAt:=xlPart, SearchOrder:=xlByRows, 
                            SearchDirection:=xlNext, _
                            MatchCase:=False, SearchFormat:=False)
        If Not rngFind Is Nothing Then Exit Do
        rngFind.EntireRow.Delete
    Loop
End With

如果排序是一个选项,那么@ tigeravata的答案会更快,因为它通过将范围限制为仅涉及的过程来迭代更少的次数。

enter image description here