[解決済み] VBAの配列ソート機能?
2023-02-18 01:35:46
質問
VBAで配列の適切なソート実装を探しています。Quicksortが望ましいです。または他の ソートアルゴリズム は、バブルやマージ以外で十分でしょう。
これはMS Project 2003で動作するものなので、Excelのネイティブ関数や.netに関連するものは避けるべきであることに注意してください。
どのように解決するのですか?
ご覧ください。
ここで
:
編集します。
参照したソース(allexperts.com)はその後閉鎖されましたが、以下は関連するものです。
著者
のコメントです。
Web上には、ソートのための多くのアルゴリズムが存在します。 最も汎用性が高く、通常、最も速いのは クイックソート(Quicksort)アルゴリズム . 以下はそのための関数です。
値の配列(文字列か数値。関係ない)を 配列の下限 (通常は
0
) と アレイ上部バウンダリ (すなわちUBound(myArray)
.)例 :
Call QuickSort(myArray, 0, UBound(myArray))
出来上がったら
myArray
はソートされ、あなたはそれを使って好きなことをすることができます。
(出典 アーカイブ.org )
Public Sub QuickSort(vArray As Variant, inLow As Long, inHi As Long)
Dim pivot As Variant
Dim tmpSwap As Variant
Dim tmpLow As Long
Dim tmpHi As Long
tmpLow = inLow
tmpHi = inHi
pivot = vArray((inLow + inHi) \ 2)
While (tmpLow <= tmpHi)
While (vArray(tmpLow) < pivot And tmpLow < inHi)
tmpLow = tmpLow + 1
Wend
While (pivot < vArray(tmpHi) And tmpHi > inLow)
tmpHi = tmpHi - 1
Wend
If (tmpLow <= tmpHi) Then
tmpSwap = vArray(tmpLow)
vArray(tmpLow) = vArray(tmpHi)
vArray(tmpHi) = tmpSwap
tmpLow = tmpLow + 1
tmpHi = tmpHi - 1
End If
Wend
If (inLow < tmpHi) Then QuickSort vArray, inLow, tmpHi
If (tmpLow < inHi) Then QuickSort vArray, tmpLow, inHi
End Sub
これは 一次元の (別名 "normal"?) 配列でのみ動作することに注意してください。 (動作する多次元配列のQuickSortがあります。 はこちら .)
関連
-
[解決済み] MIPSで配列を作る(アクセスする)方法
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 多次元配列の値によるソート方法
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み] Perl の配列を繰り返し処理する最良の方法
-
[解決済み] Swiftのクロージャで$0と$1は何を意味するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IndexError: Index 10 is out of bounds for axis 0 with size 10
-
[解決済み] RubyのArrayクラスで配列の各要素を2乗する方法は?
-
[解決済み] glVertex3fvとglVertex3fの相違点
-
[解決済み] 選択ソートが安定する理由と不安定な理由
-
[解決済み] Swiftの2次元配列
-
[解決済み] kotlinで空の配列を作成するには?
-
[解決済み] Perl の配列を繰り返し処理する最良の方法
-
[解決済み] arrayfunはmatlabの明示的なループよりかなり遅くなることがあります. なぜでしょうか?
-
[解決済み] bashでグローバルを使用せずに配列を返すには?
-
[解決済み] Swiftで配列を集合にする