根据唯一的单元格值组合多个列

Combine multiple columns based on unique cell values

我有一个 sheet :

       Col1  Col2  Col3  Col4   ------ Col5 --------
ROW 1   A     C     D     T     12,26,56,58,84,96
ROW 2   J     K     K     L     56,89,105,85,96,125
ROW 3   Y     I     X     O     5,10,60,90,85,125,40
 .
 .
 .
 .

我需要一次合并两行,我是运行一个通过sheet的嵌套循环,每次满足一个条件,就合并两行。

条件是:两行不应该在 Col5 中共享一个相似的数字,换句话说,要使条件为真,“Col5 for row X”和“Col5 for row X+1”都应该具有唯一性数字。

像这样

第 1 行和第 2 行 returns 错误,因为它们有 56 个共同点 第 1 行和第 3 行 returns 正确,因为它们没有共同的数字 第 2 行和第 3 行 returns 错误,因为它们共有 125 和 85

如果“True”满足条件并合并行,则返回“false”,然后代码移至下一行。

检查两个单元格是否具有唯一/不重复数字的最佳方法是什么?

到目前为止我尝试了什么:

到目前为止,Col5 中的数字集很小,所以我只使用了逻辑语句“Num1 <> Num2 AND Num1 <> Num3 AND ...... 但是随着数字的增长,不可能使用该方法。

我一直在考虑:

有什么建议吗?

请测试下一个代码。它处理第 5 列(“E:E”),returns 一个数组,正如我在评论中建议的那样,它的内容从第二行开始放在“G:G”列中:

Sub comopareRows()
   Dim sh As Worksheet, lastRow As Long, arr, arr2, arrChk, arrC
   Dim mtch, i As Long, arrFin, j As Long, k As Long
   
   Set sh = ActiveSheet
   lastRow = sh.Range("E" & sh.rows.count).End(xlUp).row
   arr = sh.Range("E2:E" & lastRow).Value 'place the range in an array for faster iteration
   ReDim arrFin(1 To WorksheetFunction.Combin(UBound(arr), 2), 1 To 1): k = 1
   For i = 1 To UBound(arr)
        arrChk = Split(arr(i, 1), ",")
        For j = i + 1 To UBound(arr)
            arr2 = Split(arr(j, 1), ",")
            mtch = Application.IfError(Application.match(arrChk, arr2, 0), "##") 'it replace the not mathing error with "##"
            If UBound(Filter(mtch, "##", False)) = -1 Then        'it eliminates the error replacement string and counts remained elements (in base 0)
                                                                  'an empty array returns -1
                arrFin(k, 1) = i & "-" & j & " = True": k = k + 1
            Else
                arrFin(k, 1) = i & "-" & j & " = False": k = k + 1
            End If
        Next j
   Next i
   'drop the result:
    sh.Range("G2").Resize(UBound(arrFin), 1).Value = arrFin
End Sub

请测试代码并发送一些反馈。

我试着评论那些看起来更难理解的台词。如果还有什么不清楚的,请不要犹豫,要求澄清。