You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何按OnHandX列水平排序,忽略零值从低到高排列

实现方案(覆盖常用工具场景)

方案1:Excel 365/2021及以上版本(动态数组公式,无需代码)

直接在空白单元格输入公式即可生成结果,示例适用场景:OnHand列名在B1:D1区域、对应数值在B2:D2区域,按需调整范围即可:

=TOROW(SORT(FILTER(HSTACK(B1:D1,B2:D2),B2:D2<>0),2,1),,TRUE)

公式逻辑说明:

  • HSTACK 将列名和对应数值拼接为两列数组
  • FILTER 过滤掉数值为0的条目
  • SORT 按第二列(数值列)升序排序
  • TOROW 将排序后的数组展开为水平排列的单行

方案2:全版本Excel(VBA脚本,适合批量处理多行数据)

如果需要批量处理多行数据,或者使用低版本Excel,可使用VBA实现:

Sub SortOnhandColumnsAsc()
    Dim ws As Worksheet
    Dim rng As Range
    Dim arrTemp()
    Dim i As Long, j As Long, k As Long, m As Long, n As Long
    Dim temp1, temp2
    
    ' 按需修改为实际工作表名
    Set ws = ActiveSheet
    ' 按需修改OnHand列的范围,示例为第2列到第10列
    Set rng = ws.Range(ws.Cells(1, 2), ws.Cells(ws.Rows.Count, 10))
    
    ' 逐行处理数据
    For i = 2 To rng.Rows.Count
        k = 0
        ' 收集非0的列名和对应数值
        For j = 1 To rng.Columns.Count
            If rng.Cells(i, j).Value <> 0 Then
                ReDim Preserve arrTemp(1, k)
                arrTemp(0, k) = rng.Cells(1, j).Value
                arrTemp(1, k) = rng.Cells(i, j).Value
                k = k + 1
            End If
        Next j
        
        ' 按数值升序排序
        For m = 0 To UBound(arrTemp, 2) - 1
            For n = m + 1 To UBound(arrTemp, 2)
                If arrTemp(1, m) > arrTemp(1, n) Then
                    temp1 = arrTemp(0, m): temp2 = arrTemp(1, m)
                    arrTemp(0, m) = arrTemp(0, n): arrTemp(1, m) = arrTemp(1, n)
                    arrTemp(0, n) = temp1: arrTemp(1, n) = temp2
                End If
            Next n
        Next m
        
        ' 按需修改输出起始列,示例为从第11列开始输出结果
        ws.Cells(i, 11).Resize(1, UBound(arrTemp, 2) * 2) = Application.Transpose(arrTemp)
        Erase arrTemp
    Next i
End Sub

使用注意:执行前请备份原数据,避免误操作丢失内容。

方案3:Power Query场景

如果用Power Query处理数据,操作逻辑如下:

  • 逆透视所有OnHand系列列
  • 过滤掉值为0的行
  • 按数值列升序排序
  • 重新透视为水平列即可

内容的提问来源于stack exchange,提问作者Luis Colunga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:27:03