ワークシートタブのアルファベット順(Microsoft Excel)
ブック内で多数のワークシートを使用するプロジェクトで作業している場合は、ワークシート名でそれらを並べ替えることができます。次の短いマクロは非常にうまく機能します:
Sub SortSheets() Dim I As Integer, 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 SortSheets() 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, Upper As Integer Dim I As Integer, J As Integer, 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番目のマクロと最初のマクロの間には別の違いがあります。最初のマクロは、ワークシートに名前を付けるために使用されるテキストの大文字と小文字を区別しません。したがって、マイワークシートはマイワークシートと同じように表示されます。 2番目のマクロは大文字小文字に注意を払い、それに応じて並べ替えます。もちろん、Excelはワークシート名の大文字と小文字も区別しないため、これは特に大きな問題ではありません。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(1959)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。