- 締切済み
VBA 桁数が混在するソート
シートやセルを使わず、VBAのみでクイックソートを実装したいのですが 桁数が混在する列だと正しくソートされません。 1 1 10 10 15 2 等と言う結果になります。 元のデータは外部ファイルで修正をかけたくないので VBA内で格納したデータの桁数を調節する等解決策はありますでしょうか? 以下メソッドです Sub QuickSort1(ByRef argAry As Variant, ByVal lngMin As Long, ByVal lngMax As Long, sortnum As Integer) Dim i As Long Dim j As Long Dim vBase As Variant Dim vSwap() As Variant: ReDim vSwap(UBound(argAry)) vBase = argAry(sortnum)(Int((lngMin + lngMax) / 2)) i = lngMin j = lngMax Do Do While argAry(sortnum)(i) < vBase i = i + 1 Loop Do While argAry(sortnum)(j) > vBase j = j - 1 Loop If i >= j Then Exit Do For i3 = 1 To UBound(argAry) vSwap(i3) = argAry(i3)(i) argAry(i3)(i) = argAry(i3)(j) argAry(i3)(j) = vSwap(i3) Next i = i + 1 j = j - 1 Loop If (lngMin < i - 1) Then Call QuickSort1(argAry, lngMin, i - 1, sortnum) End If If (lngMax > j + 1) Then Call QuickSort1(argAry, j + 1, lngMax, sortnum) End If End Sub
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- WindFaller
- ベストアンサー率57% (465/803)
- WindFaller
- ベストアンサー率57% (465/803)
- Picosoft
- ベストアンサー率70% (274/391)
- WindFaller
- ベストアンサー率57% (465/803)
- Picosoft
- ベストアンサー率70% (274/391)
お礼
ご回答有難うございます argAryはジャグ配列なのですが 一部文字列が含まれている列があるので型が合わないと怒られてしまいました VarTypeで見たところご推測の通り数値だけの列も文字列の8と返って来ましたが 列が文字列かどうかを固定で処理するのも好ましくないので とりあえず、最初にIsNumericを利用して数値のみの列であれば別の配列に渡して 間接的な処理をしようかと思うのですが他によさそうな手法があればご教授下さい。