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

Arrays 在VBA中对多维数组的列进行排序,arrays,vba,sorting,Arrays,Vba,Sorting,我正在努力寻找一种可以对多维数组的列进行排序的排序算法。所有列应单独排序(升序),而不与其他列链接。我已尝试使用此线程中建议的代码: 但是我得到的只是最后一列中最后一个条目的值,例如,如果第一列是(3,5,1,9),第二列是(5,4,8,1),那么我得到的是整个数组中的1。我想要的是第一列中的(1,3,5,9)和第二列中的(1,4,5,8) 我使用以下命令调用排序算法: QuickSortArray Arraytosort,,1 对第一列进行排序。计划是稍后进行循环以对所有列进行排序 我有两个问

我正在努力寻找一种可以对多维数组的列进行排序的排序算法。所有列应单独排序(升序),而不与其他列链接。我已尝试使用此线程中建议的代码:

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

我使用以下命令调用排序算法: 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

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


因此,它现在的工作方式是对我的列进行排序,但不能相互独立。有没有简单的方法来更改代码?或者我应该使用每次一列的版本

您能给我们看一下您的代码的其余部分吗?这是不是打算
示例(N,M)=sev_expo(teta,threshold)
?我的意思是,我看不到数组中的值在循环时发生变化,因为teta和threshold在循环中没有变化。是的,我忘了提到sev_expo是一个从指数分布生成数字的函数。我还将添加该代码。这是否意味着函数每次返回不同的值,而函数的参数传递给它的值相同?在for循环之后,samples()数组是什么样子的?是的,函数每次被访问时都返回随机数。samples()数组包含循环后的随机样本。