如何提取Excel单元格字符串数据、跳过空值并完成排序?


实现方法(分不同适用场景)
方法1:Excel 365/2021 原生公式实现(无需代码)
- 假设你要提取的单元格范围为
A1:A100,直接在空白单元格输入以下公式即可自动输出结果:
=SORT(TOCOL(A1:A100,1))
- 参数说明:
TOCOL第二个参数设为1,会自动跳过范围内所有空单元格- 需降序排序时修改为
SORT(TOCOL(A1:A100,1),,-1)
- 若提取非连续指定单元格,公式可调整为:
=SORT(TOCOL((A2,C5,D3,E7),1))
(括号内替换为你需要的目标单元格即可)
方法2:低版本Excel(2019及更早)实现
- 第一步提取非空值:在空白列第一行输入以下数组公式,按
Ctrl+Shift+Enter确认后下拉填充到和原数据范围等长的位置:
=INDEX($A$1:$A$100,SMALL(IF($A$1:$A$100<>"",ROW($A$1:$A$100),99999),ROW(A1)))&""
- 第二步排序:选中提取出的非空值列,点击菜单栏「数据」-「排序」,按需选择升序/降序即可。
方法3:VBA脚本实现(适合高频重复操作场景)
- 按
Alt+F11打开VBA编辑器,插入新模块后粘贴以下代码:
Sub 提取并排序() Dim rng As Range, cell As Range, arr() As String, i As Integer ' 此处修改为你的目标单元格范围 Set rng = Range("A1:A100") i = 0 For Each cell In rng If cell.Value <> "" Then ReDim Preserve arr(i) arr(i) = cell.Value i = i + 1 End If Next ' 数组排序 Call SortArray(arr) ' 此处修改为你想要的结果输出起始位置 Range("B1").Resize(i, 1) = WorksheetFunction.Transpose(arr) End Sub Sub SortArray(arr As Variant) Dim i As Integer, j As Integer, temp As Variant 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 Next End Sub
- 运行
提取并排序宏即可得到结果。
方法4:Python实现(适合多文件批量处理场景)
- 用openpyxl库处理的示例代码如下:
import openpyxl # 加载目标Excel文件 wb = openpyxl.load_workbook("你的文件路径.xlsx") ws = wb["目标工作表名称"] # 提取指定范围非空值 data = [] for row in ws["A1:A100"]: cell_val = row[0].value if cell_val and str(cell_val).strip(): data.append(str(cell_val)) # 排序 data.sort() # 结果写入B列 for idx, val in enumerate(data): ws[f"B{idx+1}"] = val # 保存文件 wb.save("处理后结果.xlsx")
内容的提问来源于stack exchange,提问作者Pattarakron Phewcha-oum
相关产品推荐
相关产品推荐

