Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Excel VBA-对二维数组排序_Arrays_Excel_Vba_Sorting - Fatal编程技术网

Arrays Excel VBA-对二维数组排序

Arrays Excel VBA-对二维数组排序,arrays,excel,vba,sorting,Arrays,Excel,Vba,Sorting,我想用VBA按字母顺序对二维数组结果(lcol,4)进行排序。此数组包含4列和可变行数(基于最后一列的值) 这是我如何填充阵列的代码: ReDim results(lcol, 4) For i = 1 To lcol results(i, 1) = ThisWorkbook.Sheets(2).Range("B1").Offset(, i - 1).Value results(i, 2) = "0" results(i, 3) = ThisWorkbook.Sheets

我想用VBA按字母顺序对二维数组
结果(lcol,4)
进行排序。此数组包含4列和可变行数(基于最后一列的值)

这是我如何填充阵列的代码:

ReDim results(lcol, 4)

For i = 1 To lcol
    results(i, 1) = ThisWorkbook.Sheets(2).Range("B1").Offset(, i - 1).Value
    results(i, 2) = "0"
    results(i, 3) = ThisWorkbook.Sheets(3).Range("C2").Offset(i - 1, 0).Value
Next i



    For Each of In ThisWorkbook.Sheets(1).Range("A1:C" & lrow2)
        Set modele = of.Offset(, 1)
        Set qte = of.Offset(, 2)

        For Each modele2 In ThisWorkbook.Sheets(2).Range("A2:A481")
            If modele2.Value = modele.Value Then
                For i = 1 To lcol 'à modifier
                    results(i, 2) = results(i, 2) + qte.Value * modele2.Offset(, i).Value
                    If results(i, 2) <= results(i, 3) Then
                        results(i, 4) = "OK"
                    Else
                        results(i, 4) = "Rupture"
                    End If

                Next i
                Exit For
            End If
        Next modele2
    Next of
ReDim结果(lcol,4)
对于i=1至lcol
结果(i,1)=此工作簿。工作表(2)。范围(“B1”)。偏移量(,i-1)。值
结果(i,2)=“0”
结果(i,3)=此工作簿。工作表(3)。范围(“C2”)。偏移量(i-1,0)。值
接下来我
对于本工作簿中的每个工作表(1)范围(“A1:C”和lrow2)
设置modele=of.Offset(,1)
设置qte=偏移量(,2)
对于本工作簿中的每种型号2.Sheets(2)范围(“A2:A481”)
如果modele2.Value=modele.Value,则
对于i=1至lcol'a修饰符
结果(i,2)=结果(i,2)+qte.Value*modele2.Offset(,i).Value
如果结果(i,2)这将在填充的数组上提供一个基本(quiksort?)升序排序,最后一列作为主键

dim i as long, j as long, tmp as variant

redim tmp(lbound(results, 1) to lbound(results, 1), lbound(results, 2) to ubound(results, 2))

for i = lbound(results, 1) to ubound(results, 1) - 1
    if results(i, ubound(results, 2)) > results(i+1, ubound(results, 2)) or _
     results(i, ubound(results, 2)) = vbnullstring then
       for j = lbound(results, 2) to ubound(results, 2)
           tmp(lbound(results, 1), j) = results(i, j)
       next j
       for j = lbound(results, 2) to ubound(results, 2)
           results(i, j) = results(i+1, j)
       next j
       for j = lbound(results, 2) to ubound(results, 2)
           results(i+1, j) = tmp(lbound(results, 1), j) 
       next j
    end if
next i

对不起,所有的lbound和ubound,但我不知道你的数组是以0为基础还是以1为基础。对于lcol,i=1的
不是确定的。所有证据都表明您的arr是基于零的。

您可以让SortedList对象完成这项工作

假设结果数组是基于1的,有4列,您可以尝试以下代码(未测试):

您可以在“主要”子系统中调用它,如下所示:

SortArray results

你能提供一些数据和预期结果吗?您可以使用a将数据格式化为表格,并将其插入代码标记之间。您好,请查找int以下表格的答案。谢谢你的帮助
SortArray results