在VBA中对多维数组的列进行排序

时间:2015-03-06 15:49:31

标签: arrays vba sorting

我正在努力寻找可以对多维数组的列进行排序的排序算法。所有列都应单独排序(升序),而不与其他列链接。我试图使用此主题中提出的代码:Sorting a multidimensionnal array in VBA

但我得到的是最后一列中最后一个条目的值。例如,如果第一列是(3,5,1,9),第二列是(5,4,8,1),那么我get在整个数组中都是1。我想要的是第一列中的(1,3,5,9)和第二列中的(1,4,5,8)。

我使用以下命令调用sort算法: QuickSortArray Arraytosort ,, 1,

对第一列进行排序。计划是稍后进行循环以对所有列进行排序。

我有两个问题:

我做错了什么?

我可以在第一时间使用此代码解决此问题吗?还是需要调整?

这是到目前为止的代码:

Sub P_Values()

Dim threshold As Long                       'threshold
Dim N As Long                               'number of samples
Dim M As Long                               'number of sims
N = Cells(2, 2)
M = Cells(3, 2)
ReDim Samples(N, M)                         'array to store samples
ReDim CM(M)
Dim teller_N As Long                        'counter sample
Dim teller_M As Long                        'counter sims
Dim teta As Double                          'teta parameter

teta = Cells(3, 6)
threshold = Cells(1, 2)

'generate samples
For teller_M = 1 To M
    For teller_N = 1 To N
        Samples(N, M) = sev_expo(teta, threshold)
        Cells(6 + teller_N, 1 + teller_M).Value = Samples(N, M)
    Next
Next

'sort sims
QuickSortArray Samples(), , , 1

来自函数sev_expo的代码:

Function sev_expo(ByVal teta As Double, ByVal threshold As Long) As Long

    Dim U As Double
    U = Rnd

    sev_expo = -teta * Log(1 - U) + threshold

End Function

1 个答案:

答案 0 :(得分:0)

如果在我的代码中找到了错误。我应该将样本存储在samples(teller_N, teller_M)而不是samples(N, M)中。真的很愚蠢,但是当你工作太久时就会发生......

所以现在它的工作方式是对列进行排序,但不能彼此独立。有没有一种简单的方法来改变代码?或者我应该每次使用一列?