arrays - 根据唯一的单元格值组合多列
问题描述
我有一张这样的表:
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
.
.
.
.
我需要一次合并两行,我在工作表中运行一个嵌套循环,每次满足条件时,这两行都会合并在一起。
条件是:两行在 Col5 中不应该共享一个 smilar 数字,换句话说,要满足条件,“Col5 for row X”和“Col5 for row X+1”应该都有唯一的数字。
像这样
第 1 行和第 2 行返回假,因为它们共有 56 个第 1 行和第 3 行返回真,因为它们没有共同的数字 第 2 行和第 3 行返回假,因为它们共有 125 和 85 个
如果“真”满足条件并合并行,则返回“假”,然后代码移至下一行。
检查两个单元格是否具有唯一/不重复数字的最佳方法是什么?
到目前为止我尝试了什么:
到目前为止,Col5 中的数字集很小,所以我只使用了逻辑语句“Num1 <> Num2 AND Num1 <> Num3 AND ......但是随着数字的增长,无法使用该方法。
我一直在考虑:
将两个 Col5 单元格作为一个动态数组,并检查该数组是否具有唯一值(不知道该怎么做)
在每个 Col5 单元中,将每个数字加到 2,然后将所有数字相加,然后得到一个数字,我可以将其与另一个 Col5 单元号进行比较。但我不确定这个方程是否每次都能从这组数字中产生一个唯一的数字(我希望这有意义)
有什么建议么 ?
解决方案
请测试下一个代码。它处理第 5 列(“E:E”),返回一个数组,正如我在评论中建议的那样,它的内容从第二行开始放在列“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
请测试代码并发送一些反馈。
我尝试评论那些看起来更难以理解的行。如果仍有不清楚的地方,请随时要求澄清。
推荐阅读
- ios - SnapKit 更新约束导致冲突
- ios - iOS 根据设备屏幕尺寸从 Assets 获取图像的实际尺寸
- php - 雄辩的 save() 方法在 for 循环中不起作用
- jsf - BootsFaces 不从 ajax 渲染区域
- matplotlib - 如何使用 matplotlib 绘制柱状图?
- vba - VBA中的验证规则来确定文本的长度
- powershell - 如何在不启用 WinRM 的情况下从 VMware Windows 来宾 VM 获取 CDROMDrive 信息?
- delphi - 为什么我尝试裁剪位图时出现空白 TImage?
- c# - Linq 返回分组结果
- image - Flutter CachedNetworkImageProvider 没有加载微调器