作成した関数に 2 つの問題があります。1 つ目は、2 次元配列の 2 列のバブル ソートです (降順ソート - 最初に 2 列目、次に 1 列目)。私はこれを正しく実装したと信じていますが、結果は異なる傾向があります。
入力
COL 1 COL 2
35.484%38.296%
1.075%0.112%
1.075%0.056%
48.387%0.124%
1.075%0.005%
2.151%0.051%
2.151%0.006%
2.151%0.002% 3.226
%0.003%
1.075%0.035%0.035% 0.035%
0.075%
% 0.263%出力
35.484%38.296%
48.387%0.124%
1.075%0.112%
2.151%0.051%
2.151%0.006%
1.075%0.056%
3.226%0.003%
1.075%0.005%
1.075%0.032%
1.075%0.184% 0.184%0.184%0.184%0.184%0.184%0.184%
0.184%
0.184%
すぐにわかるように、出力の最後の行は上位のどこかにあるはずです。
また、配列全体を範囲に出力することはできません。エラーは表示されず、関数は単に終了します。これで何か助けていただければ幸いです。コードを以下に示します。ありがとうございます。
Function larger(range1 As Range, range2 As Range)
Dim Q() As Variant
Dim x As Range, y As Range
Dim i As Integer, j As Integer
Dim varTemp(1 To 2) As Variant
Q = Range(range1.address, range2.address)
ReDim Q(1 To UBound(Q, 1), 1 To UBound(Q, 2))
j = 1
i = 1
While i < UBound(Q, 1)
For Each x In range1
While j < UBound(Q, 2)
Q(i, j) = x
j = j + 1
Q(i, j) = range2(i)
Wend
i = i + 1
j = 1
Next
Wend
' Bubble sort - first with the 2nd col and then the 1st col
'2nd col
For i = LBound(Q) To UBound(Q) - 1
If Q(i, 2) < Q(i + 1, 2) Then
For j = 1 To 2
varTemp(j) = Q(i, j)
Q(i, j) = Q(i + 1, j)
Q(i + 1, j) = varTemp(j)
Next j
End If
Next
'1st col
For i = LBound(Q) To UBound(Q) - 1
If Q(i, 1) < Q(i + 1, 1) Then
For j = 1 To 2
varTemp(j) = Q(i, j)
Q(i, j) = Q(i + 1, j)
Q(i + 1, j) = varTemp(j)
Next j
End If
Next
j = 1
For i = LBound(Q, 1) To UBound(Q, 1)
MsgBox (Q(i, j) & " " & Q(i, j + 1))
Next
MsgBox ("end")
Range("P3:Q14") = Q 'Not writing entire queue into specified range
End Function