Excel 2013中移除两列无序重复数据对的技术解决方案问询
解决Excel 2013中无顺序重复数据对的去重问题
嘿,我来帮你搞定这个Excel去重的需求!针对你说的“不考虑列顺序的重复数据对”,这里有两种方案,优先推荐最简的公式辅助列法,不需要写代码就能轻松实现:
方案一:辅助列+删除重复项(最简操作)
这个方法核心是给每对数据生成一个“标准化标识”,让顺序不同但内容相同的配对拥有相同的标识,再通过Excel自带的删除重复项功能清理:
- 添加辅助列:在数据右侧插入一列(比如C列),在C2单元格输入以下公式:
公式逻辑:比较A、B单元格的内容,把字典序更小的内容放在前面,用连字符=IF(A2<B2,A2&"-"&B2,B2&"-"&A2)-连接。这样A-D和D-A都会生成A-D,B-C和C-B都会生成B-C,完美统一相同配对的标识。 - 填充公式:将C2的公式下拉填充到所有数据行。
- 删除重复项:选中包含表头的整个数据区域(A1:C[最后一行]),点击【数据】选项卡 → 【删除重复项】。在弹出的对话框中,只勾选辅助列(C列),点击【确定】即可。
- 收尾:删除辅助列C,就得到了你想要的去重结果。
方案二:VBA宏一键生成新表(适合批量处理)
如果你需要一键生成新的去重表格,不用手动操作辅助列,可以试试这个VBA宏:
- 按下
Alt+F11打开VBA编辑器。 - 右键点击你的工作簿名称 → 【插入】→ 【模块】。
- 将下面的代码粘贴到模块窗口中:
Sub RemoveUnorderedDuplicates() Dim ws As Worksheet Dim newWs As Worksheet Dim dataRange As Range Dim cell As Range Dim dict As Object Dim key As String Set ws = ActiveSheet '新建一个工作表存放结果 Set newWs = ThisWorkbook.Worksheets.Add(After:=ws) newWs.Name = "去重结果" '复制表头到新表 ws.Range("A1:B1").Copy newWs.Range("A1") '用字典存储已出现的配对标识 Set dict = CreateObject("Scripting.Dictionary") Set dataRange = ws.Range("A2:B" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row) For Each cell In dataRange.Columns(1).Cells '生成标准化配对标识 If cell.Value < cell.Offset(0, 1).Value Then key = cell.Value & "-" & cell.Offset(0, 1).Value Else key = cell.Offset(0, 1).Value & "-" & cell.Value End If '如果字典里没有这个标识,就复制到新表 If Not dict.Exists(key) Then dict.Add key, True cell.Resize(1, 2).Copy newWs.Cells(newWs.Rows.Count, "A").End(xlUp).Offset(1, 0) End If Next cell MsgBox "去重完成!结果已保存到「去重结果」工作表。" End Sub - 按下
F5运行宏,或者回到Excel界面,点击【开发工具】→ 【宏】→ 选择RemoveUnorderedDuplicates执行即可。
内容的提问来源于stack exchange,提问作者ExcelDummy




