質問するログイン新規登録
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

937閲覧

VBA 昇順・降順でランダムな数字を並び替える。

Risty_kkk

総合スコア36

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/03/13 11:17

編集2022/03/14 04:09

0

0

以下の数字を昇順で並び替えるという課題が出ました。

19
12
34
8
15
3

条件としては今まで使った知識でコードを書く必要があり、for文・if分・Do Whileなどが現在使えます。
自分で考えてみた所、if文で、21と12を比較して小さければ入れ替えて、それをfor文で繰り返していってだと思うのですが、
それをコードで現すとなると現段階の自分の知識では思いつきません。
ネットで配列というものを見たのですが習っていないので使えません...

追記
・かける所までコードを書きました。

Sub test4() Dim a, b, c, d, e, f, g, h, i As Long a = 1 If Cells(1, 1) > Cells(2, 1) Then f = Cells(1, 1) Cells(1, 1) = Cells(2, 1) Cells(2, 1) = f End If If Cells(2, 1) > Cells(3, 1) Then g = Cells(2, 1) Cells(2, 1) = Cells(3, 1) Cells(3, 1) = f End If If Cells(3, 1) > Cells(4, 1) Then g = Cells(3, 1) Cells(3, 1) = Cells(4, 1) Cells(4, 1) = f End If If Cells(4, 1) > Cells(5, 1) Then g = Cells(4, 1) Cells(4, 1) = Cells(5, 1) Cells(5, 1) = f End If If Cells(5, 1) > Cells(6, 1) Then g = Cells(5, 1) Cells(5, 1) = Cells(6, 1) Cells(6, 1) = f End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2022/03/13 11:19

「バブルソート」で検索するといいと思います。
Risty_kkk

2022/03/13 11:47

配列を使わない方法はありますか?
hatena19

2022/03/13 12:00

並べ替えたい数値は、配列を使わずに、どのように与えられているのでしょうか。
takasima20

2022/03/13 12:08

その「ランダムな数字」てのはどこに保持されているものですか? ワークシートのセルの中?
Risty_kkk

2022/03/13 12:10

数字を変数に入れてという感じにすることはできますでしょうか?
Risty_kkk

2022/03/13 12:11

ワークシートのセルの中だと思います。
takasima20

2022/03/13 12:19

そこは断言してほしいとこだけど、とりあえず各数字を参照するコードを質問に追加しましょうか。 ベースもないとこで齟齬がでてもつまらないですからね。
Risty_kkk

2022/03/14 00:39

断言します。
hatena19

2022/03/14 01:03

セル上に数値があるということですね。 なら、エクセルのソート機能をVBAから呼び出せば簡単に実現できますが、それはだめでしょうか。
Risty_kkk

2022/03/14 01:13

ダメらしいです;;
hatena19

2022/03/14 01:18

このままでは丸投げの質問となりteratailでは推奨されない質問になってますので、未完成でもいいので、現状のコードを質問に追記してください。
nya-3

2022/03/14 03:19

やらなければならないことを全て文章にしてみてください。 A1とA2を比較し、小さいほうと入れ替え…などですね。 それすら出来ないというのであれば、 takasima20さんの言うように、バブルソートのやり方を調べるのが良いと思います。
Risty_kkk

2022/03/14 06:56

コード追記しました。
guest

回答1

0

自己解決

解決できました。

Sub test4() Dim a, b, c, d, e, f, g, h, i, p As Long Dim min As Long Dim gyo As Long Dim hako As Long a = 1 Do Until Cells(a, 1) = "" a = a + 1 Loop b = a - 1 '最終行' For c = 1 To b '変数cに最終行まで' Cells(c, 2) = Cells(c, 1) '(c,2)に(c,1)を代入' Next 'A1の数値をB2にコピー' For p = 1 To b - 1 '変数pに最終行までの繰り返し' i = p + 1 'iにp + 1 で、2 To bと同じ意味' h = i + 1 'iに +1' If Cells(p, 2) > Cells(i, 2) Then '(p,2)と(i,2)で、(p,2)が大きい場合' min = Cells(p, 2) 'minに(p,2)を代入' gyo = p 'gyoにpを代入' Else 'そうじゃなければ' min = Cells(i, 2) 'minに(i,2)を代入' gyo = i 'gyoにiを代入' End If For f = h To b If min < Cells(f, 2) Then gyo = f min = Cells(f, 2) End If Next hako = Cells(p, 2) Cells(p, 2) = min Cells(gyo, 2) = hako Next End Sub ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-03-15/47493469-baa7-4042-bcca-6db64b18552b.png)

投稿2022/03/15 00:01

Risty_kkk

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問