VBA初心者です。自分なりに本やネットで調べたのですが、
答えが見つからなかったので質問させていただきます。
フォーム内にある1つのテキストボックスに5桁の数値を入力し、
ボタンを押すことで、入力した数値をソートさせ、シート(A1)に追加入力させたい。
テキストボックス→(数値入力)→ボタンを押す→(ソート)→シート[A1]に入力
テキストボックス→91375→ボタンを押す→13579→シート[A1]=13579
自分の考えでは、入力された5桁の数値を1桁ずつ配列に格納出来れば
ソートが可能だと思うのですが、方法が分かりません。
またその場合、ソート後に1桁ずつ別々に格納した数値を
ソートさせた5桁の数値にする場合はどのようにしたら良いのでしょうか?
また、この考え方以外にも何か方法がありましたらご教授ください
No.1ベストアンサー
- 回答日時:
こんばんは。
あまり難しく考える必要はないと思います。ワークシート関数には、並べ替える関数がありますから、以下のようにSmall()関数ですればよいと思います。逆なら、Large() です。配列を引数に取れますから、簡単に出来ます。
Private Sub CommandButton1_Click()
Dim i As Integer
Dim num As Variant
Dim tmp As String
Dim buf As Variant
If IsNumeric(TextBox1.Text) Then
tmp = TextBox1.Text
ReDim num(Len(tmp) - 1)
ReDim buf(Len(tmp) - 1)
For i = 1 To Len(tmp)
num(i - 1) = CDbl(Mid(tmp, i, 1))
Next i
For i = 1 To Len(tmp)
buf(i - 1) = Application.WorksheetFunction.Small(num, i)
Next
Range("A1").Value = Join(buf, "")
End If
End Sub
返信が送れてしまい申し訳ございません。お答えいただきありがとうございます。
今回、課題でこの様な事を行っているのですが、ワークシートを利用すればソートが可能なのですね
参考にさせていただきます。ありがとうございます
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
返信が送れてしまい申し訳ございません。お答えいただきありがとうございます。
課題でこのようなものを作成していたのですが、ようやく理解できました。
また現在、ソートプログラムを勉強中でしたので、そちらも参考にさせていただきます。
ありがとうございます
No.2
- 回答日時:
ANo.1さんと同様に、ソートは他人(excel)に任せる方法です。
作業シートを使って、[データ][並べ替え]と同様の事をしてます。
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim str As String
Dim i As Integer
Set ws = Sheets("Sheet2") '適当な作業シートを指定してください
'作業シートクリア
ws.Cells.Clear
'テキストボックスの文字を作業シートのA列へ1文字づつ書き込む
For i = 1 To Len(TextBox1.Text)
ws.Cells(i, 1) = Mid(TextBox1.Text, i, 1)
Next
'A列を並べ替え
ws.Columns("A:A").Sort Key1:=ws.Range("A1"), Header:=xlNo
'作業シートのA列をまとめてActiveSheetのA1へ
str = ""
For i = 1 To ws.UsedRange.Rows.Count
str = str & ws.Cells(i, 1)
Next
Range("A1") = str
End Sub
.NET Frameworkに任せる方法です
Private Sub CommandButton1_Click()
Dim d As Object
Set d = CreateObject("System.Collections.ArrayList") '.NET Frameworkへの参照
'Dim d As New ArrayList '参照設定:Common Language Runtime Libraryにした場合、上記2行と同じ意味
Dim str As String
Dim i As Integer
'テキストボックスの文字を1文字づつArrayListへ
For i = 1 To Len(TextBox1.Text)
d.Add Mid(TextBox1.Text, i, 1)
Next
'並べ替え
d.Sort
'ArrayListのデータをまとめてActiveSheetのA1へ
str = ""
For i = 0 To d.Count - 1
str = str & d(i)
Next
Range("A1") = str
'後始末
Set d = Nothing
End Sub
返信が送れてしまい申し訳ございません。お答えいただきありがとうございます。
勉強中の身ですがNET Frameworkに任せるやり方もあるのですね
まだ使いこなすには時間がかかりそうですが、こちらも参考にさせていただきます。
ありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Excel(エクセル) EXCEL ActiveX コマンドボタンで実行する前にいったんmsgBoxで確認を求めたい 1 2022/07/06 19:41
- Visual Basic(VBA) EXCEL VBA ユーザーフォームの内容をループでデータベースに登録したい。 2 2023/02/02 10:22
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2023/01/27 09:05
- Java Java配列の問題を教えてください。 乱数で20個出力し、最大、最小、合計、平均を求め、更に昇順にソ 3 2023/07/10 18:32
- Excel(エクセル) マクロを教えてください 1 2022/11/28 14:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBScriptで重複レコードを削除...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
System.IO.Directory.GetFiles...
-
リスト構造のソートで悩んでま...
-
C言語・要素除去
-
VBA基本構文の作り方 2列の...
-
文字列をソートする方法
-
excel VBA リストビューの行...
-
あるディレクトリ内のファイル...
-
偶数奇数の判別!!
-
スプレッドでのソート
-
excel VBA の条件をつけての列...
-
ファイル名「1.jpg ~10.jpg~...
-
10個の整数を入力して小さい順...
-
vbでDataTableの抽出コピー
-
構造体配列のソート
-
MSFlexGridのSortメソッドについて
-
DataGridViewの昇順降順。
-
Excel VBA で別シートにデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
ファイル名「1.jpg ~10.jpg~...
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
Excelですべての組合せ(重複組...
-
列のどこをクリックしてもソー...
-
n番目に大きい数を求めるアル...
-
Excel VBAで並べ替えをしたい
-
DataGridViewの昇順降順。
-
vbでDataTableの抽出コピー
-
数字文字列のソート方法
-
VB6でデータを昇順に並べ替える
-
VBScriptで重複レコードを削除...
-
ListViewのソートについて
おすすめ情報