Excelでは、ワークシートのデータを任意の数の属性で並べ替えることができます。ただし、本質的に並べ替えることができないものの1つは、セルの色です。少なくともExcel2007以降に更新しない限りはそうではありません。一部のアプリケーションでは、これは非常に便利な機能です。

次のマクロSortByColorは、セルのフォーマットに使用される色に基づいてテーブルを並べ替えます。

Sub SortByColor()

On Error GoTo SortByColor_Err

Dim sRangeAddress As String     Dim sStartCell As String     Dim sEndCell As String     Dim rngSort As Range     Dim rng As Range

Application.ScreenUpdating = False

sStartCell = InputBox("Enter the cell address of the " & _       "top cell in the range to be sorted by color" & _       Chr(13) & "i.e.  'A1'", "Enter Cell Address")



If sStartCell > "" Then         sEndCell = Range(sStartCell).End(xlDown).Address         Range(sStartCell).EntireColumn.Insert         Set rngSort = Range(sStartCell, sEndCell)

For Each rng In rngSort             rng.Value = rng.Offset(0, 1).Interior.ColorIndex         Next         Range(sStartCell).Sort Key1:=Range(sStartCell), _           Order1:=xlAscending, Header:=xlNo, _           Orientation:=xlTopToBottom         Range(sStartCell).EntireColumn.Delete     End If

SortByColor_Exit:

Application.ScreenUpdating = True     Set rngSort = Nothing     Exit Sub

SortByColor_Err:

MsgBox Err.Number & ": " & Err.Description, _       vbOKOnly, "SortByColor"

Resume SortByColor_Exit End Sub

マクロは、最初に、並べ替える範囲の最初のセルを尋ねることによって機能します。これは、範囲の最上位のセルである必要があります。次に、マクロは、色の値を格納できる列を(一時的に)挿入します。次に、指定した開始セルで定義された範囲内の各セルをステップスルーします。

SortByColorは、データテーブルにヘッダー行がないことを前提としています。含まれている場合は、実際の並べ替えコマンドを変更する必要があります。 Header:= xlNoをHeader:= xlYesに変更するだけです。

SortByColorマクロは、セルに適用された明示的な色に基づいてセルを並べ替えるだけであり、セルの色が条件付き書式の結果である場合は並べ替えないことに注意してください。

注:

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

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

このヒント(3122)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。