Excel数组首行按每行数据降序排列自定义函数

2025-10-22 07:39:33

1、功能:在表格或数值数组 (数组:用于建立可生成多个结果或可对在行和列中排列的一组参数进行运算的单个公式。数组区域共用一个公式;数组常量是用作参数的一组常量。)的首行,并在表格或数组中指定行的值降序返回首行所有数据对应排列组成文本串。

2、语法:

HDOCONCATENATE(table_array,Row_index_num)

Table_array   为需要在其中查找数据的数据表。使用对区域或区域名称的引用。

· Table_array 的第一行的数值可以为文本、数字或逻辑值。

· Table_array 的第二行起的数值为数字。

Row_index_num   为 table_array 中待返回的匹配值的行序号。Row_index_num 为 1 时,返回 table_array 第一行的数值,row_index_num 为 2 时,返回 table_array 第二行的数值,以此类推。

1、首先打开Microsoft Office Excel 2007,新建文档并保存文件名《Excel数组首行按每行数据降序排列自定义函数 .xlsm》(演示文件,下面代码复制到能运行宏的工作簿都可以)如图。

Excel数组首行按每行数据降序排列自定义函数

2、然后按下快捷键ALT+F11打开VBA(宏)编辑界面,然后点菜单栏【插入】下拉中列表中点【模块(M)】如图。

Excel数组首行按每行数据降序排列自定义函数

3、然后插入了一个模块1,在代码框中复制如下代码:

Option Base 1

Function HDOCONCATENATE(mm, n As Long) As String

    '2020-8-8 22:48:26

    Dim i As Long, j As Long

    Dim mb, mc1, mcn, mmk

    If IsArray(mm) Then

        mb = mm

    Else

        On Error Resume Next

        If mm.Rows.Count > 1 And mm.Columns.Count > 1 Then

            mb = mm

        Else

            HDOCONCATENATE = "#VALUE!"

            Exit Function

        End If

        If Err.Number <> 0 Then

            HDOCONCATENATE = "#VALUE!"

            Exit Function

        End If

        Err.Clear

    End If

    If n < 1 Or n > UBound(mb, 1) Then

        HDOCONCATENATE = "#VALUE!"

    Else

        mc1 = Application.Index(mb, 1, 0)

        mcn = Application.Index(mb, n, 0)

        Erase mb

        mmk = Split(SZSX(mcn), ",")

        With CreateObject("scripting.dictionary")

            For i = 1 To UBound(mc1)

                For j = 1 To UBound(mc1)

                    If mmk(i - 1) = CStr(mcn(j)) Then

                        If .Exists(j) = False Then

                            .Add j, i

                            HDOCONCATENATE = HDOCONCATENATE & CStr(mc1(j))

                            Exit For

                        End If

                    End If

                Next j

            Next i

        End With

    End If

End Function

Function SZSX(m As Variant)

    '2020-7-8 22:50:12

    Dim sz As Object, t As Variant

    Set sz = CreateObject("MSScriptControl.ScriptControl")

    sz.Language = "javascript"

    t = Join(m, ",")

    sz.addcode "function aa(bb){sz=bb.split(',');sz.sort(function(a,b){return a-b;});sz.reverse();return sz;}"

    SZSX = sz.eval("aa('" & t & "')")

End Function

Excel数组首行按每行数据降序排列自定义函数

Excel数组首行按每行数据降序排列自定义函数

4、以上操作动态过程如下:

Excel数组首行按每行数据降序排列自定义函数

1、通过实例填写公式如下:

公式                                                           说明(结果)

=HDOCONCATENATE($A$1:$J$10,2)           5682014937

=HDOCONCATENATE($A$1:$J$10,M2)        M2为2,5682014937

=HDOCONCATENATE({1,2,3;2,4,5},2)            321

=HDOCONCATENATE({1,2,3;2,4,5},M2)        M2为2, 321

Excel数组首行按每行数据降序排列自定义函数

Excel数组首行按每行数据降序排列自定义函数

2、如果需升序使用上回分享的《Excel怎样从数据集选r个数据排列组合列表(一)》的SZSX代码。

3、如果觉得这篇经验帮到了您,请点击下方的 “投票点赞" 或者“收藏”支持我!还有疑问的话可以点击下方的 “我有疑问”,谢谢啦!

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢