Chuckは、セルで使用されている塗りつぶしの色に基づいてワークシートのレコードを並べ替える必要があると書いています。 Excelには、このようなアクションを実行するための組み込み関数はありませんが、実行する必要のある並べ替えに役立つユーザー定義関数を作成することは可能です。次のマクロについて考えてみます。

Function GetFillColor(rng As Range) As Long     GetFillColor = rng.Interior.ColorIndex End Function

塗りつぶしの色が列Aのセルにあると仮定すると、空の列Bがあることを確認するだけです。次に、セルB2に次の数式を配置し、レコードごとにコピーします。

=GetFillColor(A2)

完了すると、列Bには列Aで使用されている各塗りつぶし色のインデックス値が含まれます。列Bで並べ替えると、同様の塗りつぶし色がすべてグループ化されます。

たとえば、特定の順序(黄色が最初、赤が2番目、緑が3番目など)で並べ替える必要がある場合など、より複雑にする必要がある場合は、塗りつぶしの色のインデックス値だけに依存することはできません。このような場合、色を返す別の方法に依存する必要があります。

次のマクロについて考えてみます。

Function GetColor(rngIndex As Range, rngSource As Range) As Long     Dim lngColor As Long     Dim J As Integer

Application.Volatile     lngColor = rngSource.Interior.ColorIndex

GetColor = 99       'Set to default color     For J = 1 To rngIndex.Count         If rngIndex(J).Interior.ColorIndex = lngColor Then             GetColor = J         End If     Next J End Function

このマクロは、前のマクロとは動作が異なります。正しく機能するには、2つの範囲が必要です。最初の範囲は基本的に、色を並べ替える順序を示すカラーテーブルです。たとえば、セルE1からE9には、並べ替えに使用する9つの色を、並べ替える順序で含めることができます。次に、セルB2に次の数式を配置し、レコードごとにコピーします。

=GetColor($E$1:$E$9,A2)

その結果、列Bには、カラーテーブルの色を表す1から9までの値が含まれます。セルの色のカラーテーブルに対応する色がない場合、関数は99の値を返します。テーブルのレコードを並べ替えると、最終的には必要に応じて並べ替えられます。

注:

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

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

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

このヒント(2009)は、Microsoft Excel 97、2000、2002、および2003に適用されます。