
昔、VBAで多次元配列のクイックソートの昇順版を作ったんですが、これの降順版を作成したいと思っているんですが、うまくいきません。どなたか正解を教えて下さい。
pMyLng の1つ目の添字のkeyNum 目の変数を昇順に並び替えるマクロです。
こんな感じで使っています。
↓
ReDim xxx(1 To 2, 1 to 3)
xxx(1,1)="海"
xxx(1,2)="山"
xxx(1,3)="川"
xxx(2,1)=2
xxx(2,2)=1
xxx(2,3)=3
Call DoQuickSortHorizontalMulti(xxx, 2, UBound(xxx, 1), LBound(xxx, 2), UBound(xxx, 2))
Public Sub DoQuickSortHorizontalMulti(ByRef pMyLng As Variant, ByVal keyNum As Long, ByVal xLngMax As Long, ByVal pLngMin As Long, ByVal pLngMax As Long)
Dim i As Long
Dim j As Long
Dim k As Long
Dim BaseNum As Long
Dim BaseVal() As Variant
Dim Buf() As Variant
ReDim BaseVal(1 To xLngMax)
ReDim Buf(1 To xLngMax)
If pLngMin >= pLngMax Then
Exit Sub
Else
BaseNum = (pLngMin + pLngMax) \ 2
For k = 1 To xLngMax
BaseVal(k) = pMyLng(k, BaseNum)
Next k
For k = 1 To xLngMax
pMyLng(k, BaseNum) = pMyLng(k, pLngMin)
Next k
i = pLngMin
For j = pLngMin + 1 To pLngMax
If pMyLng(keyNum, j) < BaseVal(keyNum) Then
i = i + 1
For k = 1 To xLngMax
Buf(k) = pMyLng(k, i)
Next k
For k = 1 To xLngMax
pMyLng(k, i) = pMyLng(k, j)
pMyLng(k, j) = Buf(k)
Next k
End If
Next
For k = 1 To xLngMax
pMyLng(k, pLngMin) = pMyLng(k, i)
pMyLng(k, i) = BaseVal(k)
Next k
Call DoQuickSortHorizontalMulti(pMyLng, keyNum, xLngMax, pLngMin, i - 1)
Call DoQuickSortHorizontalMulti(pMyLng, keyNum, xLngMax, i + 1, pLngMax)
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
六角形のマスの作り方
-
JSPの処理の途中で、JavaScript...
-
csvファイルを読み込み、該当項...
-
以下のコードを実行しても、オ...
-
エクセルVBA/ Formatで文字列が...
-
HTML上(javascript)からCGIを...
-
リクエスト結果が一瞬しか表示...
-
javascriptでフォルダ内のファ...
-
更新情報がなぜブラウザで更新...
-
デザイン時のVisible=Falseは実...
-
動的ファイルの最終更新日を取...
-
VBA 図形を塗りつぶし無しにす...
-
javascript で外部サイトにデー...
-
innerHTMLなどの反映タイミング
-
C#でボタン名を変更しても動く
-
C#コンストラクタが2回動く
-
PHP処理実行後のページの遷移に...
-
正整数の半角数字かどうか判定する
-
一定時間ごとの実行
-
既存のwebサイトで、ローカルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel vba 配列内の最大値を求...
-
VBA セル範囲をVariant変数に代入
-
VB2008で数字の桁数を調べる...
-
どんなオブジェクトでも表示で...
-
Excel VBAで、ワークシート関数...
-
delete[]と、delete演算子の明...
-
VBScriptでのforms[0]など配列...
-
VBでこんなことできますか??
-
六角形のマスの作り方
-
Cで単語の頻度表を出力するプロ...
-
[VB6/VBA] Variant型配列リテラ...
-
JSPの処理の途中で、JavaScript...
-
以下のコードを実行しても、オ...
-
リクエスト結果が一瞬しか表示...
-
VBAによる第3、4水準文字の判定...
-
エクセルVBA/ Formatで文字列が...
-
正整数の半角数字かどうか判定する
-
htmlのfileタグに自動で値を入...
-
javascriptでフォルダ内のファ...
-
VBA ステータスバー DoEvents
おすすめ情報