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

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

Q&A

解決済

2回答

807閲覧

VBA 降順で並び替える。

Risty_kkk

総合スコア36

VBA

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

0グッド

0クリップ

投稿2022/03/15 00:17

0

0

以下のコードで、画像の通り降順でプログラムを組めたのですが、
その逆の、セルの6行目から1行目に向かって、降順でコードはどうすればできますか?

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

イメージ説明

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

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

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

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

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

guest

回答2

0

ソートは検索すればいろいろなアルゴリズムがみつかります。バブルソートとか・・・・
提示のコードは選択ソートに分類されるものだと思いますが、いろいろ無駄がおおいようです。

参考までに、選択ソートによる実装例です。
選択ソート - Wikipedia

vba

1Sub Sample() 2 '事前準備 3 Dim r As Range 4 Set r = Range("A1").CurrentRegion 5 r.Copy Range("B1") 'A列のデータをB列にコピー 6 7 Dim lastRow As Long 8 lastRow = r.Rows.Count '最終行 9 10 11 '選択法によるソート 12 Dim i As Long, j As Long, s As Long, t As Long, max As Long 13 For i = 1 To lastRow - 1 14 max = Cells(i, 2) 15 s = i 16 '対象セル以降の最大値セルを探索 17 For j = i + 1 To lastRow 18 If Cells(j, 2) > max Then 19 max = Cells(j, 2) 20 s = j 21 End If 22 Next j 23 '対象セルと最小値セルを入れ替え 24 t = Cells(i, 2) 25 Cells(i, 2) = Cells(s, 2) 26 Cells(s, 2) = t 27 Next i 28 29End Sub

上記で降順にならびます。
昇順にしたい場合は、途中の不等号の向きを逆にすればOKです。

投稿2022/03/15 04:58

hatena19

総合スコア34367

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

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

0

ベストアンサー

詳しくは見ていませんが、大小判定の箇所を2か所逆にしました。
これで、セルの6行目から1行目に向かって、降順に表示されました。
なお、minの文字はmaxに変えたほうが、良いかもしれません。

VBA

1Sub test4() 2 3Dim a, b, c, d, e, f, g, h, i, p As Long 4Dim min As Long 5Dim gyo As Long 6Dim hako As Long 7 8 9a = 1 10 11Do Until Cells(a, 1) = "" 12 a = a + 1 13 Loop 14 b = a - 1 '最終行' 15 16 17For c = 1 To b '変数cに最終行まで' 18Cells(c, 2) = Cells(c, 1) '(c,2)に(c,1)を代入' 19Next 'A1の数値をB2にコピー' 20 21 22 23For p = 1 To b - 1 '変数pに最終行までの繰り返し' 24i = p + 1 'iにp + 1 で、2 To bと同じ意味' 25h = i + 1 'iに +1' 26 27'If Cells(p, 2) > Cells(i, 2) Then '(p,2)と(i,2)で、(p,2)が大きい場合' 28If Cells(p, 2) < Cells(i, 2) Then '(p,2)と(i,2)で、(p,2)が大きい場合' 29 min = Cells(p, 2) 'minに(p,2)を代入' 30 gyo = p 'gyoにpを代入' 31 Else 'そうじゃなければ' 32 min = Cells(i, 2) 'minに(i,2)を代入' 33 gyo = i 'gyoにiを代入' 34 End If 35 36 37 For f = h To b 38 'If min < Cells(f, 2) Then 39 If min > Cells(f, 2) Then 40 gyo = f 41 min = Cells(f, 2) 42 43 End If 44 Next 45 46 hako = Cells(p, 2) 47 Cells(p, 2) = min 48 Cells(gyo, 2) = hako 49 50 Next 51 52End Sub 53

投稿2022/03/15 01:00

tatsu99

総合スコア5540

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問