【ネタ】手作りソート
何やら「A1:A10に入力された数値データを昇順に並び変えてB1:B10に格納せよ」という学校の課題的なお題を頂いたので作ってみました。
もちろんソート機能は使用禁止です。
(つまり実務で使う意味は皆無のネタコードです)
Option Explicit 'ソート範囲 Const SORT_RANGE As String = "A1:A10" Const RESULT_RANGE As String = "B1:B10" 'ソート個数 Const SORT_COUNT As Long = 10 '難しいことを考えるのは面倒なので、 '一番小さい数字を見つけたら一番上に入れて、 '残りの数字からさらに一番小さい数字を見つけたら…を繰り返すソートにします。 Public Sub Main() 'ワークシートを定義 Dim wsSheet As Worksheet Set wsSheet = ThisWorkbook.Sheets("Sheet1") 'ソート範囲内の数字を配列にぶちこむ 'この方法だと1列しかなくても二次元配列になる。 '※(1,1)~(10,1) Dim lNumList As Variant lNumList = wsSheet.Range(SORT_RANGE) '一番小さい数字を見つけて並べ替えるのを繰り返す Dim i As Long Dim j As Long Dim lTmpNum As Long Dim lTmpAdd As Long For i = 1 To SORT_COUNT - 1 '一番小さい数字を探す lTmpNum = lNumList(i, 1) '仮数字に先頭の数字をセット lTmpAdd = i '仮数字の座標をセット For j = i + 1 To SORT_COUNT If lNumList(j, 1) < lTmpNum Then '仮数字よりも小さいものを見つけたらそっちを仮数字に lTmpNum = lNumList(j, 1) '元の一番小さい数字と新しい一番小さい数字を入れ替える lNumList(j, 1) = lNumList(lTmpAdd, 1) lNumList(lTmpAdd, 1) = lTmpNum End If Next 'この時点でlTmpNumに入っているものが一番小さい 'それ以外でまた並べ替える Next ' 結果をワークシートに書き込む wsSheet.Range(RESULT_RANGE) = lNumList End Sub