Excel横排数据提取唯一值并按字母排序方法求助
提取横排唯一出版物编号并排序的解决方案
针对横排的重复出版物编号,以下是几种实现提取唯一值并横排输出(含排序)的方法:
方法一:Excel 365/2021(动态数组公式)
假设原数据位于A1:I1(A1为"Publications",B1至I1为编号),在任意空白单元格(如A3)输入以下公式,直接生成横排的带标题的排序后唯一值:
=HSTACK("Publications",SORT(UNIQUE(B1:I1)))
UNIQUE(B1:I1):提取横排区域内的所有唯一编号SORT():对唯一编号按文本规则升序排序(符合字母/数字字符串排序需求)HSTACK():将标题与排序后的唯一值横向拼接,输出横排结果
方法二:旧版Excel(无动态数组支持)
- 提取竖排唯一值:在空白单元格(如A3)输入数组公式,按
Ctrl+Shift+Enter确认,向下拖动填充至出现空值:
=INDEX($B$1:$I$1,SMALL(IF(MATCH($B$1:$I$1,$B$1:$I$1,0)=COLUMN($B$1:$I$1)-COLUMN($B$1)+1,COLUMN($B$1:$I$1)-COLUMN($B$1)+1,""),ROW(A1)))
- 排序:选中提取出的竖排唯一值区域,使用Excel的「排序」功能按升序排列
- 转置为横排:复制排序后的竖排区域,右键选择「选择性粘贴」→勾选「转置」,再手动添加开头的"Publications"标题
方法三:VBA宏(适用于所有Excel版本)
按Alt+F11打开VBA编辑器,插入模块并粘贴以下代码,运行宏即可自动提取、排序并横排输出结果:
Sub ExtractUniqueSortedPublications() Dim sourceRange As Range Dim uniqueVals As Collection Dim cell As Range Dim i As Integer Dim outputRange As Range ' 可根据实际情况修改区域 Set sourceRange = Range("B1:I1") ' 原编号所在横排区域 Set outputRange = Range("A3") ' 结果输出起始单元格 Set uniqueVals = New Collection ' 提取唯一值 On Error Resume Next For Each cell In sourceRange If cell.Value <> "" Then uniqueVals.Add cell.Value, Key:=CStr(cell.Value) End If Next cell On Error GoTo 0 ' 排序唯一值数组 Dim sortedArr() As String ReDim sortedArr(1 To uniqueVals.Count) For i = 1 To uniqueVals.Count sortedArr(i) = uniqueVals(i) Next i Call BubbleSort(sortedArr) ' 输出标题与结果 outputRange.Value = "Publications" For i = 1 To UBound(sortedArr) outputRange.Offset(0, i).Value = sortedArr(i) Next i End Sub Sub BubbleSort(arr() As String) Dim i As Integer, j As Integer Dim temp As String For i = LBound(arr) To UBound(arr) - 1 For j = i + 1 To UBound(arr) If arr(i) > arr(j) Then temp = arr(i) arr(i) = arr(j) arr(j) = temp End If Next j Next i End Sub
内容的提问来源于stack exchange,提问作者cappaman02
相关产品推荐
相关产品推荐

