エクセルブック内のシートがたくさんあり、シートを探すのに手間がかかります。
少しでも探す手間を省くのにシートを名前順に並べるマクロを作ろうと考えました。
シートを追加する度に「シート整列」マクロを実行する様にしたいと思います。
配列を用意してシートの名前を配列に取り込みます。
1 Dim i As Integer 2 Dim sSht As Worksheet 3 Dim sNAMEs() As String 4 ReDim sNAMEs(ThisWorkbook.Worksheets.Count - 1) 5 i = 0 6 For Each sSht In ThisWorkbook.Worksheets 7 sNAMEs(i) = sSht.Name 8 i = i + 1 9 Next
3行目がシート名を取り込む配列です。
4行目で配列の大きさをブック内のシート数に再定義しています。(配列はゼロから始まるので -1 しています)
7行目で取り込んだシート名を配列の最後にセットしています。
シート名取込と同時に並び変えます。前述のロジックに並び替えるロジックを追加しました。
1 Dim i, j As Integer 2 Dim sSht As Worksheet 3 Dim sNAMEs() As String 4 Dim wSTR As String 5 ReDim sNAMEs(ThisWorkbook.Worksheets.Count - 1) 6 i = 0 7 For Each sSht In ThisWorkbook.Worksheets 8 sNAMEs(i) = sSht.Name 9 If i > 0 Then 10 For j = i To 1 Step -1 11 If sNAMEs(j - 1) > sNAMEs(j) Then 12 wSTR = sNAMEs(j - 1) 13 sNAMEs(j - 1) = sNAMEs(j) 14 sNAMEs(j) = wSTR 15 Else 16 Exit For 17 End If 18 Next j 19 End If 20 i = i + 1 21 Next
4行目と9行目から19行目が追加した並び替えのロジックです。
8行目で取り込んだシート名は、配列の最後に追加されます。
最後に配列に追加されたシート名が直前のシート名より小さければ、12行目から14行目で配列内のシート名を入れ替えています。
入れ替えたシート名がその前のシート名より小さければ、さらに入れ替えます。
この操作をシート名が小さくないか、配列の先頭まで繰り返すことで、小さい順に並び替えることができます。
因みに、11行目の「>」を「<」にすることで大きい順に並び替えることができます。
これで、配列内ではシート名が小さい順に並び変えられています。
あとは、実際のシートを配列の順序に合わせればシートの整列が完了します。
配列の順序にシートを並び替えます。先ほどのロジックの後に追加します。
22 For i = 1 To UBound(sNAMEs) 23 ThisWorkbook.Worksheets(sNAMEs(i)).Move 24 after:=ThisWorkbook.Worksheets(sNAMEs(i - 1)) 25 Next
23行目から24行目でシートを並びかえています。
配列の(i)番目の名前のシートを(i-1)番目…つまり、ひとつ前の名前のシートの後に移動しています。
この処理を全シートについて行うことで、シート名順にシートが整列します。
私的には、とても重宝しています。
目次のシートを用意して、そこから各シートにリンクする方法もありますが………
では、また