エクセルシートの並び順が思い通り!シート名一覧で自由自在

vbasheetsorteyecatch

エクセルVBAで大量のシートの並び替えを行います。並びを考慮しないシート順では仕事も捗りません。

シート一覧+再配置マクロを使って問題解決します。

思い通りのシート並びになります。

こんにちは、じゅんぱ店長(@junpa33)です。

一つのエクセルBOOKで、その利用状況によって、みるみる使用シートの枚数が増えて40枚50枚になってしまった、ということは普通によくあることでしょう。

エクセルBOOKに入っているシートが多くなりすぎると、流石に使い勝手が悪くなってしまいます。

こんな状況の改善策の一つとして、使い勝手の良い様にシートを並び替えるという方法があります。

シートの順番を使い勝手良く思い通りに並び替え

vbasheetsortp005

基本的に、シートの並び順を変更するためには、そのBOOKのシート名を全て抽出することが必要です。

さらに、その抽出したすべてのシート名をどこに格納するかによって、その後のVBAコード設計が大きく変わってきます。

そして、どこに格納するかという点では、大きくこの2つの方法があります。

  • それぞれのシート名を ” 一つづつ配列の要素にする ” ことで並びを調整する方法
  • 対象のエクセルBOOKで、新たに専用のシート(「シート名一覧」など)を作成しそのシートのセルにシート名を書き出す。<専用のシートを新規エクセルBOOKに設置しても良いが、手間と効率面でオススメ外。>

記事タイトルの「思い通りの順番」という趣旨に沿って考えると、新規シートを追加してそこにシート名を抽出するのが、実務実用的な面での王道になると思います。

ここからは、新たなシートを設置するタイプの並び替えの方法を説明して行きます。

コード作成の概要は以下の通りです。

VBAコード作成の手順
  • シート一覧表用の新規のシートの設置
  • 全シート名の抽出と書き出し
  • シート名を意図する並び順に変更
  • 並び替えたシート名をシート配置に反映させる

②のステップで、③ステップには行かずに、別の考え方として、書き出したリストを目次として、シート名から実際にそのページに飛べるようにしたり、内容の修正変更削除などの機能を付け加えることも出来ます。

シートの並び順を意図通りに変更するコード作成

vbasheetsortp006

VBAの作成としては、

  • 新規シートでシート名をリスト化する。(シート一覧表作成)
  • シート名一覧で変更した並び順でシートを並び替える。(シート再配置)

という作業を行う2つのマクロの構成でコードを作成することになります。

作成するVBAコードは、出来るだけ簡潔になる様にしています。なので、シート名一覧表に上書き機能は付けていません。

一旦作成したシート名一覧表で、更にシート名を変更するとか、新しい内容の新規シートを追加する場合は、既に作成したシート名一覧表を手作業で削除してから改めて最初からこのマクロプロセスを実行する必要があります。

シート名一覧表の上書き機能が必要という場合は、こちらのマクロの記事をご覧ください。

vbatoclisteyecatch エクセル多用途もくじシートを自動作成するVBA

①シート一覧表用の新規のシートの設置

(「シート一覧作成」編)

最初の準備としてシート一覧用の新規シートを追加します。追加の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とします。

②全シート名の抽出と書き出し

(「シート一覧作成」編)

次に作成したシートに全シート名をリストアップしセルに書き込んでいきます。

VBA
        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列にはシート名を書き込みます。

先頭行は項目行で、新規作成シート自身の名前もリスト化されます。つまり、シート目次兼用のリストということです。

①と②のVBAコードについて詳しくは、こちらをご覧ください。

シート名一覧表作成マクロをブック登録して色んなエクセルで使う

③シート名を意図する並び順に変更

(「シート再配置」編)

リスト化したシート名を意図する並び順に変更します。

セルの上から順に並びますので、手作業でセルの配置換えを行います。

エクセルのソート機能を利用して並び替えることも出来ます。

ユーザー設定リストを外部リストから入力できる並び替えマクロは以下の記事で確認できます。

narabitorisetudleyecatch エクセル並び替えマクロツールのトリセツとダウンロード

④並び替えたシート名をシート配置に反映させる

(「シート再配置」編)

リスト化した順にシートの並びを変更します。Moveメソッドを使ってシートを移動させます。

VBA
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

Moveメソッドについては詳しくはこちらを参考にしてください。

vbasheetmoveeyecatch ワークシートのブック内移動と新規ブックへの移転を分かりやすく

With~End With の使い方についてはこちらを参考にしてください。

vbawithstateeyecatch With~End Withの使い方。VBAコードを簡潔に記述する

作成したマクロをテストする

vbasheetsortp007

完成した2つのVBAコード(マクロ)を、個人用マクロブックに記述することで、色んなエクセルBOOKで使用することが出来ます。

vbapersonalbkeyecatch 個人用マクロブックの簡単作成と削除方法と使い方ガイド

テストサンプルとして、都道府県名がシート名となっているエクセルを準備します。

都道府県番号で並ぶシートを、実務で使用しやすいように都合の良い並びに変更します。

(今回は天気予報でよく使われる順番に変更します。)

vbasheetsortp001
テストサンプル
矢印下001

「シート一覧作成マクロ」を起動して、シート名一覧表を作成します。

vbasheetsortp002-823x1024
シート名一覧表作成
矢印下001

黄色のセルの部分が主な並び順変更箇所です。手作業やソート機能で並び順を変更します。

vbasheetsortp003-823x1024
並び順を変更しました
矢印下001

「シート再配置マクロ」を起動して、新たな順番でシートを並び替えしました。

vbasheetsortp004-819x1024
再配置を行いました

この様に意図通りに並び替えが完了しました。

まとめ

vbasheetsortp008

今回はシートの自由な並び替え、再配置について説明しました。

事業期間などある程度の期間を通じて使用しているエクセルファイルは、必ず内容やシートレイアウトのメンテナンスを行う必要があるでしょう。

そこで必ず必要になるのが、シートの移動、追加、修正、削除になります。

今回のシートの移動・並び替えについて、シート枚数の少ない場合はここまでのVBAコード組みは不要でしょう。手作業の方が速いです。

問題は扱いづらいくらいのシート数がある場合です。

エクセルが並び順を判断できるシート名(数字・年月など)ではなく、テストサンプルのような固有名などのシート名ですと手作業やユーザーリストを使ったソート機能を使うことが必要になります。

これは、エクセルを業務効率化で利用する上では、覚えておかないといけないスキルになると思います。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min