都道府県を南から順に並び替えたい!エクセル並び替えVBAで毎回の手作業を一瞬で解決する方法

毎回、都道府県のデータを南から順番に並び替えるたびに、手作業でコピー&ペーストを繰り返していませんか。
エクセルの標準機能では「南から北へ」という独自の順序には対応できないため、何十行もあるデータを1行ずつ目視で確認しながら並べ直す、という地道な作業が発生しがちです。
VBAを使えば、並び替えの順番をコードの中にあらかじめ設定しておくだけで、ボタン一つで一瞬に並び替えが完了します。
この記事では、都道府県を南から北へ順番に並び替えるエクセルVBAの仕組みと、実際に使えるコードをわかりやすく解説します。
そもそも、なぜエクセルの並び替えで困るのか
エクセルの並び替え機能は便利ですが、「南から北へ」のような独自の順序には対応できていません。
まずはその具体的な原因を整理しておきましょう。
都道府県の「南から順」は通常の並び替えでは対応できない
エクセルには標準の並び替え機能が備わっていて、昇順・降順の並び替えであればツールバーのボタン一つで処理できるのでめちゃくちゃ便利です。
しかし、
都道府県を「南から北へ」という順番で並び替えたい場合は話が変わります。
「沖縄→鹿児島→宮崎→熊本…」という並び順は、アルファベット順でも五十音順でもないので対応できません。
エクセルの標準機能で用意されているのは昇順と降順だけ。
それ以外の独自の順序でデータを並び替えたい場合は、手作業でコピー&ペーストを繰り返すか、1件ずつドラッグして並べ直すしかないのです。
これが月1回、週1回と定期的に発生するルーティーン作業だとすると、毎回5分・10分と時間を積み重ねていることになります。
年間でどれだけの時間を失っているか、考えてみると怖くなりますよね。
カスタム並び替えも使えるが、設定が面倒
エクセルには「ユーザー設定リスト」というカスタム並び替え機能がありますが、実際に使ってみると設定の手間が思いのほかかかります。
設定が意外と複雑で、47都道府県をすべて手動で入力しなければなりません。
さらに、PCを変えたり、ファイルを別の環境で使う際には設定が引き継がれないため、その都度また入力し直す必要があります。
複数人で同じファイルを使い回す職場では、管理が面倒になるので注意が必要。
結局、毎回手作業で並べ直しているという方が多いのではないでしょうか。
VBAを使えば、自分で設定した並び順をコードの中に書き込んでおけるため、どの環境でも・何度使っても、同じ順番で一瞬に並び替えることができます。
都道府県を南から順に並び替えるVBAの考え方
いきなりコードを読んでも混乱してしまうので、まずは「どういう仕組みで並び替えているのか」という考え方を押さえておきましょう。
段階的に並び替えVBAに触れることでコードへの理解がぐっと深まります。
「カスタム順」を配列で定義するのがポイント
VBAで独自の順番による並び替えをするには、「並び替えたい順番をあらかじめ配列として定義しておく」ことが重要です。
配列とは、複数の値を一つの変数にまとめて格納できる仕組みのこと。
南から順に並べた都道府県の配列を用意しておき、データの各行を確認して「この都道府県は配列の何番目に当たるか」という数字(順位)を取得します。
その順位の数字を使って並び替えれば、結果的に南から北へという順番でデータが整列されます。
一度コードを書いてしまえば、次回以降はボタン1クリックするだけで作業完了です。
手作業でコピー&ペーストを繰り返す必要は二度とありません。
サンプル事例:営業所別売上データを南から並び替える
考え方だけでは少しイメージしにくいので、実際のデータを使った具体例で確認しておきましょう。
たとえば、以下のような「都道府県別の営業所データ」があったとします。

このデータを「沖縄→鹿児島→…→北海道」という南から北への順番に並び替えるのが今回の目的です。
これを手作業でやろうとすると、行を目視で確認しながら1行ずつ移動させる必要があります。
もしデータが数十行・数百行になると、手間と時間ばかりかかって効率が悪いので絶対にVBAを活用しましょう。
実際のVBAコード(南から順の並び替え)
仕組みが理解できたところで、実際に動かせるVBAコードを見ていきましょう。
プログラミング初心者の方でも読み解けるよう、コードの後に丁寧な動作解説を加えています。
都道府県並び替えVBAのコード全体
以下が、都道府県を南から北へ順番に並び替えるサンプルコードです。
このコードをVBE(Visual Basic Editor)の標準モジュールに貼り付けてください。
Sub 都道府県を南から並び替え()
'並び替えの順番を配列で定義(南→北の順)
Dim prefOrder As Variant
prefOrder = Array( _
"沖縄県", "鹿児島県", "宮崎県", "熊本県", "大分県", _
"長崎県", "佐賀県", "福岡県", "高知県", "愛媛県", _
"香川県", "徳島県", "山口県", "広島県", "岡山県", _
"島根県", "鳥取県", "和歌山県", "奈良県", "兵庫県", _
"大阪府", "京都府", "滋賀県", "三重県", "愛知県", _
"静岡県", "岐阜県", "長野県", "山梨県", "神奈川県", _
"東京都", "千葉県", "埼玉県", "群馬県", "栃木県", _
"茨城県", "福井県", "石川県", "富山県", "新潟県", _
"福島県", "山形県", "宮城県", "秋田県", "岩手県", _
"青森県", "北海道")
'処理対象のシートを指定
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1") '←シート名を変更してください
'最終行を取得
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
'作業列(Z列)に並び替え用の順位番号を書き込む
Dim i As Long
Dim j As Long
Dim found As Boolean
For i = 2 To lastRow '2行目からデータ行として処理(1行目は見出し)
found = False
For j = 0 To UBound(prefOrder)
If ws.Cells(i, 1).Value = prefOrder(j) Then
ws.Cells(i, 4).Value = j '4列目(D列)に順位を書き込む
found = True
Exit For
End If
Next j
If Not found Then
ws.Cells(i, 4).Value = 999 '配列にない都道府県は末尾に
End If
Next i
'順位番号(D列)を基準に昇順で並び替え
Dim sortRange As Range
Set sortRange = ws.Range("A1").CurrentRegion
sortRange.Sort Key1:=ws.Cells(2, 4), Order1:=xlAscending, Header:=xlYes
'作業列(D列)を削除してきれいにする
ws.Columns(4).ClearContents
MsgBox "南から北への並び替えが完了しました!", vbInformation
End Sub
コードをVBEに貼り付けたら、シート名を自分の環境に合わせて変更してください。
貼り付けた状態がこちら

都道府県名が入力されているのがA列(1列目)という前提で書いています。
別の列に都道府県が入力されている場合は、ws.Cells(i, 1).Value の「1」の部分を列番号に合わせて変更してください。
VBAコードの動作解説
コードの全体像は見えましたが、「どこで何をしているのか」を一行ずつ追うと理解が深まります。
ここでは処理の流れを順番に解説していきます。
最初の prefOrder = Array(…) の部分では、南から北への順番で都道府県名を配列に格納しています。
「沖縄県」が一番最初(0番目)、「北海道」が最後(46番目)という順番です。
この配列がいわば「並び替えの設計図」になります。
次の lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row の部分では、データが入力されている最終行を自動で取得しています。
データが10行あれば10、100行あれば100という数字が取得されます。
これにより、データが増えても減っても、コードを変更することなく対応できます。
For i = 2 To lastRow から始まるループ処理が、このコードの核心です。
2行目(見出し行の次)から最終行まで、1行ずつ都道府県名を読み取っていきます。
内側の For j = 0 To UBound(prefOrder) では、配列の中を頭から順番に検索しています。
たとえば、処理中の行に「鹿児島県」という値が入っていた場合、配列の中で「鹿児島県」は1番目(インデックス1)に格納されているため、Z列に「1」という数字が書き込まれます。
「沖縄県」なら「0」、「北海道」なら「46」という具合に、すべての行に順位番号が振られていきます。
このとき ws.Cells(i, 4).Value = j という部分の「4」がD列を指しています。
作業用の列として使うだけなので、データが入力されていない空き列を使用することがポイントです。
sortRange.Sort の部分では、D列(4列目)に書き込んだ順位番号を基準に、表全体を昇順で並び替えています。
昇順つまり小さい順に並び替えることで、順位番号が0(沖縄県)から始まり46(北海道)まで順番に並んだデータが出来上がります。
結果的に、表が南から北への順番に整列されます。
並び替えが終わったら ws.Columns(4).ClearContents でD列の作業データを消してきれいにしています。
最後の MsgBox で処理完了のメッセージを表示して終了です。
実行結果がこちら

ボタンを設置してワンクリックで実行できるようにする
コードが動くことを確認したら、次はシート上にボタンを設置して操作をさらに簡単にしましょう。
ボタンがあれば、VBEを開かなくても誰でも同じ操作でマクロを実行できるようになります。
設置方法は、「開発」タブ →「挿入」→「ボタン(フォームコントロール)」を選択してシート上に配置するだけです。

配置したボタンに「都道府県を南から並び替え」マクロを割り当てれば完成。
ボタンを押すたびに、どんなに行数が増えても一瞬で並び替えが完了します。
応用編:北から南への並び替えにも対応する
南から北への並び替えが完成したら、逆方向の並び替えもセットで用意しておくと実務での使い勝手がぐっと上がります。
対応方法は非常にシンプルなので、ここで一緒に作っておきましょう。
やり方は、
配列の順番を逆にする
たったこれだけ。
配列の先頭を「北海道」にして末尾を「沖縄県」に編集してください。
Sub 都道府県を北から並び替え()
Dim prefOrder As Variant
prefOrder = Array( _
"北海道", "青森県", "岩手県", "秋田県", "宮城県", _
"山形県", "福島県", "新潟県", "富山県", "石川県", _
"福井県", "茨城県", "栃木県", "群馬県", "埼玉県", _
"千葉県", "東京都", "神奈川県", "山梨県", "長野県", _
"岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", _
"京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", _
"鳥取県", "島根県", "岡山県", "広島県", "山口県", _
"徳島県", "香川県", "愛媛県", "高知県", "福岡県", _
"佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", _
"鹿児島県", "沖縄県")
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim i As Long
Dim j As Long
Dim found As Boolean
For i = 2 To lastRow
found = False
For j = 0 To UBound(prefOrder)
If ws.Cells(i, 1).Value = prefOrder(j) Then
ws.Cells(i, 4).Value = j
found = True
Exit For
End If
Next j
If Not found Then
ws.Cells(i, 4).Value = 999
End If
Next i
Dim sortRange As Range
Set sortRange = ws.Range("A1").CurrentRegion
sortRange.Sort Key1:=ws.Cells(2, 4), Order1:=xlAscending, Header:=xlYes
ws.Columns(4).ClearContents
MsgBox "北から南への並び替えが完了しました!", vbInformation
End Sub
「南から並び替え」と「北から並び替え」、2つのボタンをシート上に置いておけば、状況に応じてワンクリックで切り替えられる便利なファイルが完成します。
配列を編集すれば都道府県以外にも応用できる
「配列で順番を定義する」というこの仕組みは、都道府県の並び替えだけに使えるテクニックではありません。
自社の部署順や担当者の役職順など、独自のルールで並べ替えたいデータがあれば、配列の中身を変えるだけで対応できます。
たとえば、会社独自の部署順、商品カテゴリの順番、担当者の役職順など、エクセルの標準機能では対応できない「独自の順序での並び替え」に対応可能。
配列の中身を変えるだけでどんな順番にも対応できるので、非常に汎用性が高いテクニックです。
この考え方をマスターしておけばこの先、手作業で並び替えすることはほとんどなくなるでしょう。
( ここ数年、私はツールバーにあるフィルター機能を使っていません。)
関連記事「並び替えに毎回10分ロス!?VBAで一瞬で完了させる4つのソート術」では、今回紹介したカスタム並び替え以外にも、昇順・降順・複数条件での並び替えなど、実務で使える4種類のソートテクニックをまとめています。
さらに、並び替えVBAが設定されたエクセルファイルをダウウンロードすることもできます。
エクセルVBAで並び替えを自動化するメリット
VBAを使って並び替えを自動化することで得られるメリットは、時間の節約だけではありません。
編集ミスが激減する、エクセルが苦手な人でも複雑な並び替えができる、などのというメリットがあります。
実際に並び替えVBAを導入して感じたメリットを詳しくご紹介します。
作業時間の削減が最大のメリット
VBAで並び替えを自動化することの最大のメリットは、作業時間を大幅に削減できることです。
たとえば、月に4回、1回あたり10分かけて手作業で都道府県を並び替えていたとすると、月に40分、年間で480分(8時間)もの時間を並び替え作業だけに費やしていることになります。
丸1日分の労働時間が、たった一つの繰り返し作業に消えているわけです。
VBAを導入すれば、その480分がほぼゼロになります。
浮いた時間を別の仕事や自分の時間に使えるようになると考えると、VBAを導入しない選択肢はほぼ存在しません。
ヒューマンエラーをゼロにできる
並び替えVBAを導入すると、「並べ替えたつもりが1行だけズレていた」「コピー&ペーストで1行消えていた」というようなヒューマンエラーをゼロにすることができます。
経験したことがある方が多いと思いますが、並び替え作業中に誤って別のセルのデータを上書きしてしまうと取り返しのつかない事態になることがあります。
(いつ間違ったかわからないから戻りようがない、もう上書き保存までしちゃった、、、)
VBAによる自動並び替えであれば、毎回同じロジックで同じ処理が実行されるため、ヒューマンエラーが入り込む余地がありません。
作業の品質を安定させたいという観点からも、VBA導入の価値は非常に効果的です。
一度作れば何度でも使い回せる
VBAコードは一度作ってしまえば何度でも使い回すことができ、エクセルが苦手な人が並び替えをしても全く同じ内容で処理することができます。
今回作成した「都道府県を南から並び替えるVBA」は、ファイルを変えても・データが増えても・担当者が変わっても、同じように動作します。
新入社員が並び替えようが、ベテラン社員が並び替えようが、全く同じ処理結果となるのです。
チームで共有しているファイルに設定しておけば、自分が不在のときでも誰でも同じ操作でデータを整理できるようになる。
いろんな人が共通のエクセルファイルを操作するような職場では、かなり大きなメリットとなります。
もし「自分の業務に合わせた複雑なチェック処理を実装したい」「既存のマクロを改良したい」といったご要望がありましたら、マメBlogのエクセルマクロ開発依頼にご相談ください。
業務内容に合わせたオーダーメイドマクロを設定させていただきます。
最後まで読んでいただきありがとうございました。エクセルVBAを使って面倒なルーティーン作業を自動化しちゃいましょう。






