数字の並べ替え への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 定年爺さん  (社会人) 投稿日時 2011/12/14 09:38:31
YuOさん、るきおさんお指導大変ありがとうございます。
るきおさんのを使わせていただきました。
始めたばかりで内容がわかりませんが時間はありますので少しずつ勉強します。
今後よろしくお願いいたします。
投稿者 るきお  (社会人) 投稿日時 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
投稿者 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 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