Patは、ワークブックのワークシートをアルファベット順に並べる簡単な方法があるかどうか疑問に思います。これを行うための組み込みメソッドはありませんが、マクロを使用して並べ替えを行うことは可能です。このヒントでは、2つのアプローチを紹介します。 1つ目は、並べ替えを行う簡単な方法を提供します。

Sub SortSheets1()

Dim I As Integer     Dim J As Integer

For I = 1 To Sheets.Count - 1         For J = I + 1 To Sheets.Count             If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then                 Sheets(J).Move Before:=Sheets(I)

End If         Next J     Next I End Sub

このマクロは、ワークシートのタブを名前の昇順で並べ替えます。降順で並べ替える場合は、中心線の>を<に変更するだけです。

ブック内のワークシートの数が比較的少ない場合、マクロはうまく機能します。マクロを実行するときに、実行にかなりの時間がかかることに気付いた場合は、マクロでより効率的な並べ替えアルゴリズムを使用することをお勧めします。たとえば、以下は、すべてのワークシートの名前を配列に読み取り、BubbleSortアルゴリズムを使用して配列を並べ替えてから、実際の配置を行うバージョンです。

Sub SortSheets2()

Dim I As Integer     Dim sMySheets() As String     Dim iNumSheets As Integer

iNumSheets = Sheets.Count     Redim sMySheets(1 To iNumSheets)



For I = 1 To iNumSheets         sMySheets(I) = Sheets(I).Name     Next I

BubbleSort sMySheets

For I = 1 To iNumSheets         Sheets(sMySheets(I)).Move Before:=Sheets(I)

Next I End Sub
Sub BubbleSort(sToSort() As String)

Dim Lower As Integer     Dim Upper As Integer     Dim I As Integer     Dim J As Integer     Dim K As Integer     Dim Temp As String

Lower = LBound(sToSort)

Upper = UBound(sToSort)

For I = Lower To Upper - 1         K = I         For J = I + 1 To Upper             If sToSort(K) > sToSort(J) Then                 K = J             End If         Next J         If I <> K Then             Temp = sToSort(I)

sToSort(I) = sToSort(K)

sToSort(K) = Temp         End If     Next I End Sub

しばらくの間プログラミングをしたことがある人なら誰でも、BubbleSortが優れた汎用ソートルーチンであることを知っていますが、より高速なものもあります。

たとえば、かなりの数のワークシートがあり、それらが非常にまとまりのないものから始まっている場合は、QuickSortアルゴリズムの方が有益であることがわかります。 QuickSortを使用するために上記を変更するために必要なのは、QuickSortアルゴリズムをサブルーチンとして追加し(アルゴリズムはVisual Basicプログラミングブックにあります)、メインのSortSheetsマクロ内からプロシージャを呼び出すことだけです。 (これは、BubbleSortが呼び出される行を変更することを意味します。)

この2番目のマクロと最初のマクロの間には別の違いがあります。最初のマクロは、ワークシートに名前を付けるために使用されるテキストの大文字と小文字を区別しません。したがって、MyWorksheetはMYWORKsheetと同じように表示されます。 2番目のマクロは大文字小文字に注意を払い、それに応じて並べ替えます。もちろん、Excelはワークシート名の大文字と小文字も区別しないため、これは特に大きな問題ではありません。

簡単なメモ:上記のBubbleSortルーチンは、本質的に汎用です。つまり、ワークシートタブの名前を並べ替えるだけでなく、任意の配列を並べ替えることができます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13440)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。

Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります: