Excel。マクロ36。指定した順番でシートを並び替えるにはどうしたらいいの?
<Excel VBA:シートの並び替え>
大量のシートを例えば店舗ごとに並び替えをしたい場合、
手動でシートを移動させて並び替えをするのは、
とても面倒ですし、時間もかかってしまします。
1月~12月のような連続性がある場合には、
For~Next構文を使うなどして、
並び替えをしたいシート名を別のシートに吸い出して、
並び替えをして、それを使ってシートを並び替えることができますが、
店舗名や社員名など、五十音順ではなく、
指定した順番で並び替えをするには、どうしたらいいのしょうか?
そこで、今回は、指定した順番でシートを並び替える方法をご紹介していきます。
確認ですが、次のようなブックになっています。
新宿から東京までのシートを指定した順番で並び替えをしていくわけですが、
指定した順番を作成しておかないといけませんので、
今回は、並び替えというシートを用意するところから始まります。
並び替えのシートには次のようなデータを用意しておきます。
大崎・品川・渋谷・新宿・東京。
そして代々木の順番にシートを並び替えするのが今回のゴールになります。
では、Excel VBAでプログラム文を作っていきましょう。
Sub シート並び替え指定()
Dim i As Long
With Worksheets("並び替え")
Sheets(.Cells(1, 1).Value).Move before:=Sheets(4)
For i = 6 To Sheets.Count
Sheets(.Cells(i - 4, 1).Value).Move after:=Sheets(i - 2)
Next i
End With
End Sub
説明の前に、実行してみましょう。
どうでしょう。
大崎・品川・渋谷・新宿・東京。
そして代々木の順番にシートを並び替えることができましたね。
それでは、プログラム文を確認していきましょう。
Dim i As Long
お馴染みの変数の宣言ですね。今回は、Long型にしております。
With Worksheets("並び替え")~End With
今回は、With構文を使いました。
理由は、いちいち、
Worksheets("並び替え")を何度も入力するのが面倒だからです。
With構文を使えば省略することができますね。
続いて、
Sheets(.Cells(1, 1).Value).Move before:=Sheets(4)
最初の起点となるシートをまずは移動させる必要があります。
今回は、上期集計シートの右側に移動させて、
そこから並び替えた各シートを移動させたいわけですね。
Sheets(.Cells(1, 1).Value)は、Sheets(並び替えシートのa1の値)。
つまり、大崎という名前のシートという意味になります。
これを、Move before:=Sheets(4)
4枚目のシートのbefore。4枚目のシートの”前”に、Move。移動させる。
この一行は、
「大崎シートを、4枚目のシートの前に移動させる」という意味になります。
4枚目のシートの前に移動させれば、
起点となるシートは4枚目に移動させることができます。
For i = 6 To Sheets.Count
Sheets(.Cells(i - 4, 1).Value).Move after:=Sheets(i - 2)
Next i
あとの残りのシートを並び替えしていきますので、
繰り返しの構文を使って移動させていきます。
i = 6 は、今回、6店舗なので6にしています。
Sheets.Countは、シートの枚数を数えることができます。
その数まで繰り返すようにしています。
Move afterで、シートの後に移動することができます。
このように、ビックリするぐらい行数は少なくて作ることができます。
プログラマーさんならば、きっと配列を使ったりと、
もっとカッコいい効率的な構文になるかと思いますが、
めちゃくちゃ詳しくなくても、やりたいことが表現できますので、
少しずつExcel VBAになれて、
日ごろの業務を少し時短できるようになるといいですね。