
昔、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ランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
エクエルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
-
vbsでのwebフォームへの入力制限?
-
ダブルクリックで貼り付けた画...
-
vba textboxへの入力について教...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
えくせるのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
VBAでセルの書式を変えずに文字...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAの「To」という語句について
-
VBAでFOR NEXT分を Application...
-
VB.net 文字列から日付型へ変更...
-
【ExcelVBA】5万行以上のデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB2008で数字の桁数を調べる...
-
コードの意味 ("Scripting.Dict...
-
[VB6/VBA] Variant型配列リテラ...
-
どんなオブジェクトでも表示で...
-
Excel vba 配列内の最大値を求...
-
六角形のマスの作り方
-
VBA セル範囲をVariant変数に代入
-
delete[]と、delete演算子の明...
-
VBA 多次元配列のクイックソー...
-
PowerPointで時計表示
-
JSPの処理の途中で、JavaScript...
-
VB.NET2003 テキストボックスに...
-
正整数の半角数字かどうか判定する
-
VBAによる第3、4水準文字の判定...
-
以下のコードを実行しても、オ...
-
初心者です。gulpでコンパイル...
-
ブラウザの横幅に応じてとある...
-
if(1){...}とはどういうことで...
-
VBA SORT Applyでエラー
-
エクセルVBA/ Formatで文字列が...
おすすめ情報