求Formula或VBA:保留列重复值,移除行内重复值
Excel每行去重(保留列方向重复)解决方案
以下是三种实用方案,覆盖不同Excel版本需求:
方案1:动态数组公式(Excel 365/2021专属)
合并为单单元格展示
如果只需将每行唯一值合并到一个单元格,在目标单元格输入:
=BYROW(A1:D10,LAMBDA(r,TEXTJOIN(", ",TRUE,UNIQUE(r))))
替换A1:D10为你的实际数据区域,公式会自动遍历每行,提取唯一值并用逗号分隔。
保留原列结构(空出重复值位置)
要保持原列布局,重复值位置留空,输入:
=BYROW(A1:D10,LAMBDA(r,LET(u,UNIQUE(r),HSTACK(u,IF(SEQUENCE(,COLUMNS(r)-COLUMNS(u)),"")))))
公式会将每行唯一值从左到右排列,剩余列填充空白。
方案2:VBA宏(全Excel版本兼容)
适合需要批量处理且无动态数组功能的旧版Excel:
- 按
Alt+F11打开VBA编辑器 - 右键左侧工程窗口→插入→模块
- 粘贴以下代码:
Sub RemoveRowDuplicates() Dim ws As Worksheet Dim lastRow As Long, lastCol As Long Dim i As Long, j As Long, k As Long Dim cellValue As Variant Dim uniqueValues As Collection Set ws = ActiveSheet ' 可修改为指定工作表,比如Sheets("你的表名") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column For i = 1 To lastRow Set uniqueValues = New Collection ' 收集该行唯一值 For j = 1 To lastCol cellValue = ws.Cells(i, j).Value If cellValue <> "" Then On Error Resume Next uniqueValues.Add cellValue, Key:=CStr(cellValue) On Error GoTo 0 End If Next j ' 清空行并重新写入唯一值 ws.Rows(i).ClearContents For k = 1 To uniqueValues.Count ws.Cells(i, k).Value = uniqueValues(k) Next k Next i Set uniqueValues = Nothing Set ws = Nothing MsgBox "每行去重完成!" End Sub
- 按F5运行宏,完成后会自动将每行重复值移除,唯一值靠左排列。
方案3:Power Query可视化操作
无需公式或代码,通过图形界面完成:
- 选中数据区域,点击「数据」→「从表格/区域」(若数据无标题,取消勾选「我的表格有标题」)
- 在Power Query编辑器中,选中所有列→「转换」→「逆透视列」→「逆透视其他列」
- 选中「属性」列→「删除重复项」(此时会删除每行内的重复值)
- 选中「行」列→「转换」→「透视列」,值列选择「值」,高级选项选「不要聚合」
- 点击「关闭并上载」,生成每行去重后的新表格。
内容的提问来源于stack exchange,提问作者Ayy
相关产品推荐
相关产品推荐

