• ベストアンサー

Excel VBA テキストボックス内の数値をソートさせるのには?

imogasiの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

1単位の数字桁をソートするなんて珍しいニーズと思う。普通は数個以上の数値(群)があって、それら相互で小ー>大などの順に並べるのですが。 初歩的なソートのアルゴリズム(下記はバブルソート)を使って1桁ずつの数字のソートをするほか無いでしょう。普通はやりやすいため、各桁を配列に入れます。 桁数が10数桁というありがたい制約のおかげで、凝ったアルゴリズムは不要でしょう。 Sub test01() Dim y(13) '桁数上限 x = 91375 '数値 テスト用 x = 9311752 '数値 x = 88312952 '数値 '--各桁を配列に For i = 1 To Len(x) y(i) = Mid(x, i, 1) * 1 '配列に Next i '--確認 'For i = 1 To Len(x) 'MsgBox y(i) 'Next i '---ソート a = 1 'テスト用 Cells.Clear 'テスト用 Ends = Len(x) i = 1 Do Until i >= Ends j = i + 1 Do Until j > Ends If y(i) > y(j) Then w = y(i) 'Swap y(i) = y(j) y(j) = w End If j = j + 1 Loop For c = 1 To Len(x) '確認用 セルに途中を表示 Cells(a, c) = y(c) Next c a = a + 1 i = i + 1 Loop '--確認用 For c = 1 To 5 Cells(a, c) = y(c) Next c a = a + 1 '---数値に戻す n = 0 For K = 1 To Len(x) n = n + y(K) * 10 ^ (Len(x) - K) Next K Cells(a, 1) = n End Sub

junta3618
質問者

お礼

返信が送れてしまい申し訳ございません。お答えいただきありがとうございます。 課題でこのようなものを作成していたのですが、ようやく理解できました。 また現在、ソートプログラムを勉強中でしたので、そちらも参考にさせていただきます。 ありがとうございます

関連するQ&A

  • テキストボックスをグループ化するVBA

    エクセル上に並んだテキストボックスを、ボタンを押すことで、任意のテキストボックスをグループ化させたい。また、別のボタンでグループ化の解除が出来るようなVBAをおしえてください。 テキストボックスは、Sheet1~3まであって、ボタンもそれぞれに配置してあり、 どこのSheetのボタンを押しても、各シート、それぞれに任意の設定したテキストボックスがグループ化できるようにしたい ※各シート、グループ化するテキストボックスはおなじでなない・・・ よろしくお願いします。

  • VBAテキストボックスについて

    こんばんは。 エクセルVBAのテキストボックスの使用方法で行き詰っています。 配列内のデータをテキストボックスへ表示してあります。 テキストボックスを、ダブルクリックして内容を変更し、 変更したデータを配列へ格納する仕組みにしようとしています。 問題は、ダブルクリックすると、テキストボックス内のデータが消えてしまう事です。変更せず他のテキストボックスをクリックすると、データが消えたままになってしまいます。 データは表示したままで、必要な箇所のみ変更する。 ダブルクリック後何もせず、他のテキストボックスをクリックしても 、データは残る仕組みにしたいのですが、可能でしょうか? ご教授お願いいたします。 ※仕事の関係でお礼が遅くなりましたら申し訳ございません。

  • エクセルVBA チェックBoxとテキストBox

    VBA勉強中の者です。エクセル2010使用 前回も同じような件で質問したのですが、入力フォームを作成中。 数量表の入力ホームなので、出来るだけキーボードのテンキーでの操作が出来るようにと考えております。 チェックボックスのon/off でテキストボックスの入力の可否を出来るようにしています。これが7組あるとします。(チェックボックス1に対してテキストボックス1に数値が入力出来るように) 質問(1) チェックが入っていれば、呼応したテキストボックスへエンターキーで移動。 チェックを入っていなければ、エンターキーで次のチェックボックスへ移動するようにしたいのです。 質問(2) シートへの転記の際は、7組の間に『、』カンマを入れたいのですが、当然チェックのないものは必要ないので、カンマが要らない事になります。初心者の考えでは単純に条件式をその通り数書くことになるのかと思うとゾッとしますが、少しでも条件式を減らす方法があれば、ご教授願います。 分かり難くて、すみません。

  • エクセルVBA テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

  • EXCEL VBA のテキストボックスで

    EXCEL VBAのテキストボックスでボックス内にテキストを入力 しなければカーソルの移動が出来ないようにできますか? 宜しくお願いします。

  • テキストボックスの大きさを、基準の大きさに戻す(エクセルVBA)

    図形のテキストボックスの大きさを取得して、その値を各テキストボックスの基準の大きさとして記録しておき、テキストボックスの大きさをマウスでドラッグして大きさを変えた後、ボタン1つでもとの大きさに戻したいのですが、どのようにすればよいでしょうか? 1)図形のテキストボックス、大きさの取得方法は? 2)基準の大きさと記録する方法は? 3)記録された大きさに戻すには?(シート上に配置されたボタンで実行) ※ 複数のシートに複数のテキストボックスがあります。 ※ シート毎にセットします。(シート毎にテキストボックスのサイズが違う為) ※ 現在、各テキストボックスには、基準位置がセットしてあり、ボタンで基準位置へ戻る仕組みが組まれています。(これをそのままにして・・・) ※ エクセル97と2000で使えるようにします。(作成は97) 宜しくお願い致します。

  • エクセルVBAでテキストボックス等選択する。

    こんばんわ! エクセルのVBAのユーザーフォームについての質問です。 オプションボタン1・2・3とあって 1を選択したらテキストボックス1が選択される(そのまま入力できる状態になる) 2を選択したらテキストボックス2が選択される(そのまま入力できる状態になる) 3を選択したらテキストボックス3が選択される(そのまま入力できる状態になる) ということをしたいのですが、どのようにすればよいでしょうか? アドバイスの程よろしくお願いいたします。

  • VBAでの「0011」などの頭に0がつく数値の扱い

    質問です。 VBA初心者です。 現在、エクセルのVBAで会社で使用するツールを自作しようとしています。 サンプルなどで勉強しつつ、フォームのテキストボックスに入力した数値をシートに転記したのですが、0011など頭に0のつく数値だと、シート上では11となってしまいます。 これを0011と、そのままシートに転記したいのですが、どなたか良い方法をご教授願えませんでしょうか? 宜しくお願いします。

  • 数値の大きい順にソート

    数値の大きい順にソートするにはどのようにしたらよろしいでしょうか? 例えば、 @A = ("10","5","18","6","9"); という配列があるとします。 これを @B = sort @A; とすると、 10,18,5,6,9 となってしまいます。 これを 18,10,9,6,5 のように数値の大きい順に配列Bに代入したいのですが、どうしたらよいでしょうか?よろしくお願いします。

    • ベストアンサー
    • Perl
  • テキストボックス

    たびたびの質問すみません。 エクセルVBAでテキストボックス等(条件)に入力すると、他のテキストボックスにエクセルシートから照合して表示させる方法で、条件のテキストボックス等を2つ以上にすることは可能でしょうか、あればやり方を教えてください。