エクセルVBAで大量のシートの並び替えを行います。並びを考慮しないシート順では仕事も捗りません。
シート一覧+再配置マクロを使って問題解決します。
思い通りのシート並びになります。
こんにちは、じゅんぱ店長(@junpa33)です。
一つのエクセルBOOKで、その利用状況によって、みるみる使用シートの枚数が増えて40枚50枚になってしまった、ということは普通によくあることでしょう。
エクセルBOOKに入っているシートが多くなりすぎると、流石に使い勝手が悪くなってしまいます。
こんな状況の改善策の一つとして、使い勝手の良い様にシートを並び替えるという方法があります。
- シートの知識
- シートの存在を確認する2種類のコードと実務での例題
- シートクリアーを目的のメソッド別にVBA最速理解
- シートのコピーを最速に理解!VBAコードで異なる結果
- Excelシートを追加・挿入するAddメソッドの使い方
- シートの選択・指定方法とその意味。簡単でも軽視してはダメ
- エクセルシートの名付け・変更と取得そして一覧化するコード
- ワークシートのブック内移動と新規ブックへの移転を分かりやすく
- エクセルシートの並び順が思い通り!シート名一覧で自由自在
- Excelシートを保護する。 記述方法とプロテクトされない操作
- エクセルシートを削除する。Deleteの使い方と注意ポイント
- エクセルシートの非表示コードをパスワード管理するVBA
- ワークシートを変数化する3つの手法 オブジェクト変数など
コンテンツ
シートの順番を使い勝手良く思い通りに並び替え
基本的に、シートの並び順を変更するためには、そのBOOKのシート名を全て抽出することが必要です。
さらに、その抽出したすべてのシート名をどこに格納するかによって、その後のVBAコード設計が大きく変わってきます。
そして、どこに格納するかという点では、大きくこの2つの方法があります。
- それぞれのシート名を ” 一つづつ配列の要素にする ” ことで並びを調整する方法
- 対象のエクセルBOOKで、新たに専用のシート(「シート名一覧」など)を作成しそのシートのセルにシート名を書き出す。<専用のシートを新規エクセルBOOKに設置しても良いが、手間と効率面でオススメ外。>
記事タイトルの「思い通りの順番」という趣旨に沿って考えると、新規シートを追加してそこにシート名を抽出するのが、実務実用的な面での王道になると思います。
ここからは、新たなシートを設置するタイプの並び替えの方法を説明して行きます。
コード作成の概要は以下の通りです。
- シート一覧表用の新規のシートの設置
- 全シート名の抽出と書き出し
- シート名を意図する並び順に変更
- 並び替えたシート名をシート配置に反映させる
②のステップで、③ステップには行かずに、別の考え方として、書き出したリストを目次として、シート名から実際にそのページに飛べるようにしたり、内容の修正変更削除などの機能を付け加えることも出来ます。
シートの並び順を意図通りに変更するコード作成
VBAの作成としては、
- 新規シートでシート名をリスト化する。(シート一覧表作成)
- シート名一覧で変更した並び順でシートを並び替える。(シート再配置)
という作業を行う2つのマクロの構成でコードを作成することになります。
作成するVBAコードは、出来るだけ簡潔になる様にしています。なので、シート名一覧表に上書き機能は付けていません。
一旦作成したシート名一覧表で、更にシート名を変更するとか、新しい内容の新規シートを追加する場合は、既に作成したシート名一覧表を手作業で削除してから改めて最初からこのマクロプロセスを実行する必要があります。
①シート一覧表用の新規のシートの設置
(「シート一覧作成」編)
最初の準備としてシート一覧用の新規シートを追加します。追加のVBAコードは以下のようになります。
Sub シート一覧作成()
Dim NWSN As String
Dim Sh As Worksheet
Dim ShN As String
Dim s As Long
On Error Resume Next
NWSN = "シート一覧" & Format(Date, "yymmdd") & _
"_" & Format(Now, "hhnn")
Worksheets.Add(before:=Worksheets(1)).Name = NWSN
(当ブログ記事「シート名一覧表作成マクロをブック登録して色んなエクセルで使う」より)
シート一覧作成プロシージャーの前半の部分になります。
追加した日付を付けたシート名で新規作成します。毎回の作成時でシート名が変わりますので、変数NWSHとします。
②全シート名の抽出と書き出し
(「シート一覧作成」編)
次に作成したシートに全シート名をリストアップしセルに書き込んでいきます。
With Worksheets(NWSN).Cells(1, 1)
.Value = "INDEX NO."
.Offset(, 1) = "Sheet Name"
End With
s = 1
For Each Sh In Worksheets
ShN = Sh.Name
With Worksheets(NWSN).Cells(s + 1, 1)
.Value = s
.Offset(, 1) = ShN
Columns("A:B").AutoFit
End With
s = s + 1
Next
On Error GoTo 0
End Sub
(当ブログ記事「シート名一覧表作成マクロをブック登録して色んなエクセルで使う」より)
シート一覧作成プロシージャーの後半の部分になります。
シートのA列にはインデックス番号、B列にはシート名を書き込みます。
先頭行は項目行で、新規作成シート自身の名前もリスト化されます。つまり、シート目次兼用のリストということです。
③シート名を意図する並び順に変更
(「シート再配置」編)
リスト化したシート名を意図する並び順に変更します。
セルの上から順に並びますので、手作業でセルの配置換えを行います。
エクセルのソート機能を利用して並び替えることも出来ます。
④並び替えたシート名をシート配置に反映させる
(「シート再配置」編)
リスト化した順にシートの並びを変更します。Moveメソッドを使ってシートを移動させます。
Sub シート再配置()
Dim i As Long
For i = 3 To Cells(Rows.Count, 2).End(xlUp).Row
With Worksheets(1)
Worksheets(.Cells(i, 2).Value).Move after:=Worksheets(i - 2)
.Select
End With
Next i
End Su
作成したマクロをテストする
完成した2つのVBAコード(マクロ)を、個人用マクロブックに記述することで、色んなエクセルBOOKで使用することが出来ます。
個人用マクロブックの簡単作成と削除方法と使い方ガイドテストサンプルとして、都道府県名がシート名となっているエクセルを準備します。
都道府県番号で並ぶシートを、実務で使用しやすいように都合の良い並びに変更します。
(今回は天気予報でよく使われる順番に変更します。)
「シート一覧作成マクロ」を起動して、シート名一覧表を作成します。
黄色のセルの部分が主な並び順変更箇所です。手作業やソート機能で並び順を変更します。
「シート再配置マクロ」を起動して、新たな順番でシートを並び替えしました。
この様に意図通りに並び替えが完了しました。
まとめ
今回はシートの自由な並び替え、再配置について説明しました。
事業期間などある程度の期間を通じて使用しているエクセルファイルは、必ず内容やシートレイアウトのメンテナンスを行う必要があるでしょう。
そこで必ず必要になるのが、シートの移動、追加、修正、削除になります。
今回のシートの移動・並び替えについて、シート枚数の少ない場合はここまでのVBAコード組みは不要でしょう。手作業の方が速いです。
問題は扱いづらいくらいのシート数がある場合です。
エクセルが並び順を判断できるシート名(数字・年月など)ではなく、テストサンプルのような固有名などのシート名ですと手作業やユーザーリストを使ったソート機能を使うことが必要になります。
これは、エクセルを業務効率化で利用する上では、覚えておかないといけないスキルになると思います。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。