複数の背景色キーを指定できるVBAコードの組み立て

vbanarabiirokieyecatch

エクセルVBA 並び替え 複数の背景色をキーにして並び替えを行なうためのVBAコードを組み立てます。
背景色別に順番に整列させることが出来ます。

こんにちは じゅんぱ店長 (@junpa33) です。

VBAを使って、エクセルのセルデータの並び替えを行うツールを作成しています。

並び替えのキー項目を扱うVBAコードについて説明をしていきます。

今回は、セルの背景色で並び替えを行なうVBAコードの本体部分の説明です。

この背景色での並び替えは、Sortオブジェクトで可能な内容で、Sortメソッドでは対応していません。

Sortオブジェクトでは、あと、「文字の色」「セルのアイコン」で並び替えが出来るようにもなりました。

並び替えマクロ 記事階層

この記事番号は7番です。

複数の背景色キーで並び替えを行うVBA記述の要点

このコードを記述すれば並び替えが出来るという要点は以下の通りです。

  1.  並び替え条件を一旦クリアすること
  2.  並び替えの背景色キーのセル番地を指定すること
  3.  並び替えに背景色キーの利用を指定すること
  4.  並び順(昇順・降順)を指定すること
  5.  文字列と数値の並び替え区別をすること
  6.  並び替えの背景色キーを指定すること
  7.  並び替え範囲を指定すること
  8.  先頭行の種別を指定すること
  9.  並び替えを実行を指示すること

並び替えについての解説はこちらの記事をご覧ください。

vbasorteyecatch データの並び替え VBA新旧のSortを実データで実証

この中で語彙的に、並び替えルールとしては意味が少々分かりづらいものがあります。

④並び順(昇順・降順)とはナニ?

「黄色に昇順・降順があるの?」ということですが、この場合の並び順のルールは、

並び方・・・背景色キーのセル(のある行)が上から行番号順に並びます。そしてその並び順は保持されます。

昇 順・・・背景色キーの並び順が保持されたまま、その塊が行の最上位に並びます。

降 順・・・背景色キーの並び順が保持されたまま、その塊が行の最下位に並びます。

背景色キーの保持されている並び順自体を変更するには、異種複合キー(列キーと背景色キー)による並び替えを行なう必要があります。

複数の背景色キーを使った並び替えのVBAコード

複数の背景色を使って並べ替えを行うVBAはこのようになります。

もちろん設定条件は全て変数化しています。

複数の背景色キーを使った並び替え
VBA
Sub Sort背景色()
        On Error Resume Next
        ws.Sort.SortFields.Clear
        ws.Sort.SortFields.Add(Cells(1, ClrNoACellc), _
                xlSortOnCellColor, Stream4, , xlSortNormal). _
                    SortOnValue.Color = ClrNoA
        ws.Sort.SortFields.Add(Cells(1, ClrNoBCellc), _
                xlSortOnCellColor, Stream5, , xlSortNormal). _
                    SortOnValue.Color = ClrNoB
        ws.Sort.SortFields.Add(Cells(1, ClrNoCCellc), _
                xlSortOnCellColor, Stream6, , xlSortNormal). _
                    SortOnValue.Color = ClrNoC
        With ws.Sort
            .SetRange SSRange
            .Header = Head
            .Apply
        End With
        On Error GoTo 0
        Cells(SSRange.Rows.Count, SSRange.Columns.Count). _
            Offset(1, 1).Select
        MsgBox "並び替えが完了しました。"
        With ソートナビゲーター
            .背景色選択1.Value = ""
            .背景色選択2.Value = ""
            .背景色選択3.Value = ""
        End With
End Sub
  •  SortFields.Addは括弧( )で条件となる定数を指定していきます。
  •  Cells(1, ClrNo Cellc)はキーになるセルを指定していますが、セル番地というよりは列番号が重要になっているようです。
  •  xlSortOnCellColorは背景色をキーとして利用することを指定しています。
  •  Stream4・5・6は並び順を指定しています。(昇順・降順)
  •  SortOnValue.Color = ClrNo はキーになる背景色を指定しています。色の指定は、色番号でもRGB表記でも認識されます。
  •  SSRangeは並び替えの選択範囲を指定しています。
  •  Headは並び替え範囲の先頭行が見出し行かデータ行かを指定しています。
  •  Applyは並び替え実行を指示するメソッドです。

色指定の方法 参考まで

並び替えのキー項目としての色を指定する方法として、RGB表記で番号を打ち込む方法もあります。

例えば、セルの背景色を表現するときに、

Range(“D5”).Interior.Color = RGB(255, 255, 0)

と記述し実行すると、セルD5の背景色は「黄色」で表示されます。

RGB(255,255,0)は黄色ということが理解できます。

逆に、セルの背景色を見た時セルD5は黄色だけれど「RGB(255,255,0)」だと断言できる人はいないと思います。

それは「RGB(254,254,0)」だって黄色だからです。

これは、背景色で並び替えをした時には、当然、違う色の認識になります。

ですので、

黄色の並び替えとして、黄色のRGBコードを打ち込んでも「黄色違い」で並び替えされないこともあるという事です。

つまり

色をキーにして並べ替えを行う時は、やはり、「このセルの色、この文字の色」として直接クリック指定できる様にプログラムした方が便利なことは明らかということになります。

ちなみに、白色 RGB(255,255,255)で並び替えをしても、並び替えは実行されません。(仕様のようです)

エクセルの並び替えを複数の背景色で行うVBA まとめ

Sortオブジェクトを使えば、背景色を並び替えのキーとして実行できるようになります。

エクセルの作表時に、文字や数値のマーカーとして背景色の着色は頻繁に行っています。

単なる順位付けとは違った並び替えが可能になりますので、

これは是非使いこなしたい機能になっています。

VBAコードの組み立てもそんなに複雑にしなくても動くことが分かりましたので、うまく活用してきましょう。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min