数字の並べ替え

タグの編集
投稿者 定年爺さん  (社会人) 投稿日時 2011/12/13 15:16:55
定年になり始め始めました素人です。この掲示板で見つけたのですが機能しません。
TextBoxの数字を並べ替えたいのです。

5,1,10,6,12,3,

これをSortすると

1,10,12,3,5,6   

となります。

1,3,5,6,10,12

としたいのです。 よろしくご指導ください。

VB2010を使用しています。


 Dim i As Integer
 Dim j As Integer
 Dim sort As Integer

 For i = 1 To 5
            For j = i + 1 To 6

                If Me.Controls("TextBox" & i).Text > Me.Controls("TextBox" & j).Text Then
                    sort = Me.Controls("TextBox" & i).Text
                    Me.Controls("TextBox" & i).Text = Me.Controls("TextBox" & j).Text
                    Me.Controls("TextBox" & j).Text = sort
                End If
            Next
        Next
投稿者 YuO  (社会人) 投稿日時 2011/12/13 15:38:05
TextプロパティはSystem.String型,つまりは文字列型です。
"1"と"10"と"2"では,"1"c < "2"cなので,"1"と"10"は"2"より前に来ます。

数値として並べたいのであれば,数値として比較する必要があります。
必ず数字だけからなる,という前提をおいてよければ,
Int32.Parse (or Integer.Parse)を使ってInteger型にして比較することで,10 > 2とすることができます。
投稿者 るきお  (社会人) 投稿日時 2011/12/13 20:39:11
YuOさんが書かれているようにTextプロパティは文字列型なので
普通に比較すると国語辞書の掲載順で考えた場合に前か後かという判断になります。
国語辞書に載るとしたら「10」は「3」の前ですよね。

数値として比較するには自分でいったん数値に変換する必要があります。
その方法はさまざまですが、たとえばCInt関数を使った例を書いてみました。

  
Dim i As Integer
Dim j As Integer
Dim sort As Integer

For i = 1 To 5
    For j = i + 1 To 6

        If CInt(Me.Controls("TextBox" & i).Text) > CInt(Me.Controls("TextBox" & j).Text) Then
            sort = Me.Controls("TextBox" & i).Text
            Me.Controls("TextBox" & i).Text = Me.Controls("TextBox" & j).Text
            Me.Controls("TextBox" & j).Text = sort
        End If
    Next
Next
投稿者 定年爺さん  (社会人) 投稿日時 2011/12/14 09:38:31
YuOさん、るきおさんお指導大変ありがとうございます。
るきおさんのを使わせていただきました。
始めたばかりで内容がわかりませんが時間はありますので少しずつ勉強します。
今後よろしくお願いいたします。