IT女子がお届けするオフィスワーク効率化・VBA技術紹介

ノンプログラマーによるノンプログラマーのためのやさしい解説付き

スポンサーリンク

VBAでバブルソートを書いてみた

f:id:excel-accounting:20180721220837j:plain:w400


いつも実務系のマクロばかり作っているので、たまにはプログラミングの王道みたいなものを書きたくなりました。


プログラミングの王道と言えばソート処理ですよね!(そうなのかな?)


[VBA バブルソート]とかで検索すると先人たちの答えがたくさん出てきそうなので、あえて何もみないでチャレンジしてみます。

Option Base 1

Sub VBAでバブルソート()
    
    'ソート対象の要素数特定と配列変数の準備
    Dim arrNum() As Long, n As Long
    n = Cells(1, 1).End(xlToRight).Column
    ReDim arrNum(n)
    
    'ソート対象の数字を配列に格納していく
    Dim i As Long
    For i = 1 To n
        arrNum(i) = Cells(1, i)
    Next i
    
    Dim x As Long: x = n - 1
    Do '隣り合う数字の大小を比較して並び替え
    
        For i = 1 To x
        
            If arrNum(i) > arrNum(i + 1) Then
                '一時変数を利用して値を入れ替える
                Dim tmp As Long
                tmp = arrNum(i)
                arrNum(i) = arrNum(i + 1)
                arrNum(i + 1) = tmp
            End If
            
        Next i
        
        x = x - 1
    
    Loop Until x = 0
    
    'ソート後の結果を2行目に書き込み
    For i = 1 To n
        Cells(2, i) = arrNum(i)
    Next i

End Sub


エクセルシートのA1セルを起点として、適当な数字を入力します。

マクロを実行すると、1行目の数列を小さい順に並べ替えた結果が2行目に書き込まれる仕組みです。
f:id:excel-accounting:20180721221508p:plain



実務系マクロと違って、これが難しい!


実務で使うマクロは、基本的に人間の手作業をVBAで書きます。

悩みポイントは「この処理、VBAでどうやって書くんだろう」なので

文法をググれば解決するのですが、


このようなTHE・プログラミングの悩みポイントは

「そもそもどうやって実現するんだろう?」なので、

ググって解決するものではないんですね。


Excelって、行の処理には強いけど、列の処理には弱い印象があります。

行の「フィルタ」や「並び替え」の機能はあるけど、列にはないですよね。

なので、このバブルソートを上手く実務に活用できないかなぁーと思ってます。

スポンサーリンク