0

私は VBA を使用してペアごとの勾配を計算し、それらを配列に格納してから、Chip Pearson のワークシート上の配列を転置してそれらを並べ替える手法を使用しています。勾配の数が 65K を超えると、コードが失敗します。これは、行数が原因で、Excel 2003 では意味があります。Excel 2010 で動作すると思っていましたが、同じ問題があるようです。Resize プロパティまたは Transpose メソッドに制限があるかどうかは誰にもわかりませんか?

ありがとう

Sub pairwise()
Dim endrow As Long, i As Long, j As Long, s As Long
Dim num As Double, denom As Double, sij As Double
Dim r As Range
Dim slopes()

endrow = Range("A1").End(xlDown).Row
n = endrow - 1
nrd = endrow * n / 2
ReDim slopes(nrd)
Debug.Print LBound(slopes); UBound(slopes)
For i = 1 To n
For j = (i + 1) To endrow
    num = Cells(i, 2).Value - Cells(j, 2).Value
    denom = Cells(i, 1).Value - Cells(j, 1).Value
    If denom <> 0 Then
        sij = num / denom
        slopes(s) = sij
        s = s + 1
    End If
Next j
Next i

Set r = Range("C1").Resize(UBound(slopes) - LBound(slopes) + 1, 1)
    r = Application.Transpose(slopes)

    ' sort the range
    r.Sort key1:=r, order1:=xlAscending, MatchCase:=False
End Sub
4

2 に答える 2

1

メソッドの制限ですTranspose

私の提案は、配列を最初から2Dとして宣言することです

Redim Slopes(1 To nrd, 1 To 1)

Forまた、ループ内のセルをループする代わりに、バリアント配列アプローチを使用する必要があります

于 2013-10-19T03:00:09.643 に答える