人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルVBAに関する質問です。配列に保存してあるデータにソートをかけることは簡単にできるのでしょうか?
一度シートに展開しないとだめなのでしょうか?

●質問者: kaiketsu
●カテゴリ:コンピュータ
✍キーワード:VBA エクセル ソート データ 配列
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● km1967
●35ポイント

簡単にできる。

ソートのアルゴリズムは色々あるが、下記のサンプルが一番簡単

http://d.hatena.ne.jp/Cassiopeia/20070501/1178045569


2 ● heke2mee
●35ポイント
Private Function TestQuickSort() As Long
 Dim WorkAry As Variant
 WorkAry = Uniq_Random(50000)

 'QuickSort
 Call QuickSort(WorkAry, LBound(WorkAry), UBound(WorkAry)) 
End Function


Private Function QuickSort(ByRef WorkAry As Variant, _
 ByVal MinIndex As Long, _
 ByVal MaxIndex As Long) As Long
 
 Dim Index As Long
 Dim Left As Long
 Dim Right As Long
 Dim Key As Long
 Dim Center As Long
 Dim Temp As Variant
 
 Left = MinIndex
 Right = MaxIndex
 
 '中央の値を取得
 Center = WorkAry((MinIndex + MaxIndex) \ 2)
 
 Do While True
 
 '中央から左側を精査
 For Left = Left To MaxIndex
 If WorkAry(Left) >= Center Then
 Exit For
 End If
 Next
 
 '中央から右側を精査
 For Right = Right To MinIndex Step -1
 If WorkAry(Right) <= Center Then
 Exit For
 End If
 Next 
 
 'Break
 If Left >= Right Then
 Exit Do
 End If
 
 '要素を交換
 Temp = WorkAry(Left)
 WorkAry(Left) = WorkAry(Right)
 WorkAry(Right) = Temp
 
 Left = Left + 1
 Right = Right - 1
 
 Loop
 
 '左側の再精査
 If (MinIndex < Left - 1) Then
 Call QuickSort(WorkAry, MinIndex, Left - 1)
 End If 
 
 '右側の再精査
 If (MaxIndex > Right + 1) Then
 Call QuickSort(WorkAry, Right + 1, MaxIndex)
 End if
 
End Function

【注意点】

文字列データの比較方法はOption Compareステートメントで設定します。

既定値はBinary モードです。バイナリ文字コードのコード順によって行われます。

文字コードはUnicodeで表現されるので、結果はUnicodeのコード順によって決まります。

Textモードでは、50音順で、大文字と小文字、カタカナとひらがなを区別しない。

(OSの国別情報の設定が日本の場合)

http://q.hatena.ne.jp ダミー

◎質問者からの返答

簡単な関数はないんですね。。。。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ