お世話になります。
Vb6.0 FlexGridControl6.0(SP3) を使っています。
グリッドは 10行x10列 程です。
今、初めに一列目で全体をソートして、次にその順序を崩さずに
三列目をキーにしてソートしたいのですが(Excelのような感じで)、
まったくわかりません。
アルゴリズムも考えてみましたが、パニックってしまいました。
なにか良い方法ありますか?
逆でやってください。
まず 3 列目でソートする。で、1 列目でソートします。(^^)
藤代さん、ご回答ありがとうございました。
やり方が悪いのかうまくいきませんでした。。
初心者のため、もう少し教えて頂きたいのです。
Dim index as integer
grid.Col = index
grid.ColSel = grid.Cols - 1
Select Case index
Case 3
.sort = 3
ここで、三列目でソートしています。
この次にどのように記述すればよいのでしょうか?
本当に申し訳ありませんが、よろしくお願いします。m(_ _)m
説明が下手なので追加させてください。。
列1 列2 列3
A1 B1 R
A2 B2 F
A1 B3 F
A1 B4 R
A2 B5 R
A1 B6 F
A1 B7 R
A1 B8 F
↓
A1 B3 F
A1 B6 F
A1 B8 F
A1 B1 R
A1 B4 R
A1 B7 R
A2 B2 F
A2 B5 R
のような感じで、一発でソートしたいと考えています。
列3が最優先のキーで、列1が二番目に優先したいキーです。
申し訳ありませんが、よろしくお願いします。
あの、FlexGrid ですよね。
.Sort = 3
は、3 列目の指定ではなく、降順でソートする指定ですよ。理解されていますか?
#理解されているとすると、なんで、ソートキー列とソート指定に同じ Index を使用しているか分からない。(-_-;
1 列目と 3 列目、どっちを優先させたいのか、よく分かりませんので、入れ替えて試してください。(^^)
grid.Col = 3
grid.Sort = 1 '' 一般的な昇順。
grid.Col = 1
grid.Sort = 1 '' 一般的な昇順。
#この例だと、最終的には 1 列目でソートされますが、1 列目の値が同じものは、3 列目でソート済みです。(^^;
藤代さん、ご丁寧なご回答ありがとうございます。
FlexGrid です。
また説明不足ですみません。。
メニューエディタで、並べ替えを選択できるようにしています。(インデックス3 には三列目でソートできるように)
それで、メニューエディタのインデックスと、ソートに使いたい列番号を index で対応させています。
説明いただいた様に、記述してやってみました。
確かに、結果が変わり、だいぶよい感じになりました。ありがとうございます。
しかし、2003/09/22(月) 18:48:36 に投稿させていただいた感じにしたいのです
が、どうもうまくいきませんでした。難しいです。。。
無理なのでしょうか。。。
.sort=3 (数値昇順)ですが、
その下に投稿した例とは関係ありません。
その例でいけば、
grid.Sort = 1
ですね。
紛らわしくてすみません。
未だによく分かりません。メニューでソート列を決定するとして、どうして 1 → 3 列になるのでしょう?
また、表示されたサンプルは、1 → 3 → 2 です。説明と合っていません。
FlexGrid で複数列をソートする場合、逆順の指定でソートするのが基本的な手法です。なので、それを説明したのですが、こちらで試してみると、確かにうまくいきません。どうもソートを、シェーカーソートかなにかでしているようで、直前のソートが一部崩れてしまいます。
なのでサンプルにあるようにソートするには、Sort = 9 のカスタムを使うことになると思います。
何をしているかは、ヘルプとコードから読みとってください。
Private Sub cmdSort_Click()
MSHFlexGrid1.Sort = 9
End Sub
Private Sub MSHFlexGrid1_Compare(ByVal Row1 As Long, ByVal Row2 As Long, Cmp As Integer)
Dim sRow1 As String
Dim sRow2 As String
With MSHFlexGrid1
sRow1 = .TextMatrix(Row1, 1) & .TextMatrix(Row1, 3) & .TextMatrix(Row1, 2)
sRow2 = .TextMatrix(Row2, 1) & .TextMatrix(Row2, 3) & .TextMatrix(Row2, 2)
Cmp = StrComp(sRow1, sRow2)
End With
End Sub
藤代さん、本当にありがとうございました。
私の説明が下手にもかかわらず、教えて頂き感謝しております。
初心者なもので、ソートも今回初めて使い、基本的な手法も分かっていませんでした。
勉強になりました。
お蔭様で、理想のソートができました。
また、コードもなんとか理解することができました。(^^;)
本当にありがとうございました。m(_ _)m
ツイート | ![]() |