著書「外資系コンサルは無理難題をこう解決します」発売中
PR

Excelのデータ分類用カラムにグループ感を出すVBAマクロ

グループ罫線を引くマクロ 作業効率

Excelでは左側に分類、右側にデータというレイアウトでデータを整理することが多いと思います。

そのとき左側の分類カラムがなんとなくグループ化されているとパッと見でわかりやすくて嬉しいですよね。

しかしセル結合は地雷ですし、条件付き書式でやるとうまく動かないことがあるので余計不便です。

やるなら罫線とフォント色なのですが、手作業でちまちまやるのは面倒ですよね。

そこで、ボタン一発でできるマクロを作りました(昔の自分が作っていました)ので共有したいと思います。

スポンサーリンク

なにがどうなるか

グループ罫線を引くマクロ

上の図のとおりです。

左のようにバラバラと並んでいてグループ化されていないように見えるデータを、右のようなグルーピングがわかる見た目に整えます。

マクロでいじるのは罫線の設定とフォントの色だけなので、オートフィルタの邪魔をしません。

マクロの使い方

使い方ですが、特に難しいところはありません。

  1. 分類のところも含めてデータを全部埋めます
  2. 見た目を整えたい部分を選択します(データ行のみ)
  3. マクロを起動します

以上です。

VBAマクロのソースコード

ソースコードは以下の通りです。

 

'選択エリア情報格納用
Public Type SelectionInfo
    StartRowIndex As Long   '選択エリアの一番上の行インデックス
    StartColIndex As Long   '選択エリアの一番左の列インデックス
    EndRowIndex As Long     '選択エリアの一番下の行インデックス
    EndColIndex As Long     '選択エリアの一番右の列インデックス
    RowCount As Long        '選択エリア内の行数
    ColCount As Long        '選択エリア内の列数
    CurrentRowIndex As Long '現在の行インデックス
    CurrentColIndex As Long '現在の列インデックス
End Type

'共通処理
'選択エリア情報格納処理
'--------------------------------------
'シートの内容を加工するのに必要となる「選択エリア」の情報を格納して返します。
Public Function GetSelectionInfo() As SelectionInfo

    Dim selInf As SelectionInfo
    
    With selInf
        .StartRowIndex = Selection.Row
        .StartColIndex = Selection.Column
        .EndRowIndex = Selection.Rows.Count + Selection.Row - 1
        .EndColIndex = Selection.Columns.Count + Selection.Column - 1
        .RowCount = Selection.Rows.Count
        .ColCount = Selection.Columns.Count
        .CurrentRowIndex = ActiveCell.Row
        .CurrentColIndex = ActiveCell.Column
    End With

    GetSelectionInfo = selInf

End Function

'選択エリアの表にグループ罫線を引く
Public Sub グループ罫線()
     
    Application.ScreenUpdating = False
     
    Dim colIdx As Long
    Dim rowIdx As Long
    Dim selInf As SelectionInfo 'シートの選択領域
 
    Dim lngAddCnt As Long   '追加行数
    lngAddCnt = 0
     
    '選択情報取得
    selInf = GetSelectionInfo()
     
    '最初のセルから正順(列優先)に処理を行なう
    For colIdx = selInf.StartColIndex To selInf.EndColIndex
        For rowIdx = selInf.StartRowIndex To selInf.EndRowIndex
            '罫線を引く
            With cells(rowIdx, colIdx)
                If .Value <> cells(rowIdx - 1, colIdx) Then
                    '値が上のセルと異なる場合罫線で囲う
                        .Borders(xlEdgeTop).LineStyle = True
                        .Borders(xlEdgeRight).LineStyle = True
                        .Borders(xlEdgeBottom).LineStyle = True
                        .Borders(xlEdgeLeft).LineStyle = True
                    '値が同じ場合、上罫線は消し、文字色を薄くする
                    Else
                        .Borders(xlEdgeTop).LineStyle = False
                        .Borders(xlEdgeRight).LineStyle = True
                        .Borders(xlEdgeBottom).LineStyle = True
                        .Borders(xlEdgeLeft).LineStyle = True
                        .Font.ColorIndex = 48
                End If
             End With
                 
        Next
    Next
    Application.ScreenUpdating = True
End Sub

 

グループ罫線()が本体です。その前の共通部分はその昔どこかからひっぱってきたものだと思います。

こちらを個人用のアドイン(*.xlam)に放り込んでおくと、ほかのファイルでも使いまわせて便利です。

参考 アドインを追加または削除する – Excel

リボンにボタンを追加するとクリック一発で呼び出せるようになります。

参考 Office でリボンをカスタマイズする – Office サポート

注意事項

データは分類用のカラム含めて全部埋めてください。空きがあるとキレイになりません。

マクロの実行はCtrl+zでUndoできません。実行の際は事前にテストしてください。

まとめ:マクロで自動化しよう

というわけで、Excelのデータ分類用カラムにグループ感を出すVBAマクロのご紹介でした。

Excelはなにかとお作法があって面倒ですが、できるところは自動化して手間と時間を省きたいものですね。

https://work.naenote.net/entry/macros-for-excel-habits

コメント

コメント以外のご意見・ご要望、管理人へのご連絡などは、お問い合わせからどうぞ

タイトルとURLをコピーしました