Skip to content
戻る

Excel VBAでグルーピングしてセルに罫線を設定する

Published:  at  12:21

概要

前回の続きです。

色付けただけじゃわかりずらいよね?よね?
なので前のソースに少し手を加えて罫線も設定します。

前提等は前の記事と一緒です。
ソースだけ貼ります。

目次

ソース

前回のメインプログラムにLineSwを呼び出す処理を書いてやるだけ

LineSwメソッドでは水平罫線を設定します。
同じグループの間は点線、グループが変わったら実線です。
垂直罫線はメイン処理で一括で入れてあげて構わないでしょう。

https://gist.github.com/973fd4584097ac35f411ff863ef9893f 🔗

わかりづらくてすみません。
新規追加のコメント部分が追加になったものです。
垂直罫線の設定はここでやってます。

'************************
'**定数
'************************
'シート名
Public Const sheet_list = "抽出リスト"

'************************
'**グルーピング処理
'************************
Sub rowGrouping()
  Dim rowMax As Long  'レコード数
  Dim keyNew As String  'グルーピングキー(現在)
  Dim keyOld As String  'グルーピングキー(現在-1)

  Dim colorIdx As Long  '色決め番号
  Dim targetSheet As Worksheet  'サブに渡すシートオブジェクト
  Dim targetRange As Range  'グルーピング範囲

  Dim i As Long '汎用カウンタ

  Set targetSheet = ThisWorkbook.Worksheets(sheet_list)

  '最大行数取得
  rowMax = targetSheet.Cells(Rows.Count, "A").End(xlUp).Row

  '新規追加 垂直罫線一括設定
  With targetSheet.Range("A1:X" & rowMax).Borders(xlInsideVertical) 'セルの上を指定
   .LineStyle = xlDash   '薄い感じのやつ
   .ColorIndex = xlAutomatic
   .TintAndShade = 0
   .Weight = xlThin
  End With

  colorIdx = 0  '初期化
  For i = 2 To colMax '1行目は項目名の為、2行目からスタート
    keyNew = targetSheet.Cells(i, "A").Value 'キー取得
    Set targetRange("A" & i & ":X" & i)  '着色範囲設定
    If keyNew = keyOld Then 'キーが1つ前と同じならば
      call colorSw(targetRange, colorIdx Mod 2)  '前と同じ色を着色

      '新規追加 水平罫線設定
      call LineSw(targetRange, True)
    Else  'キーが1つ前と違うならば
      colorIdx = colorIdx + 1 'キーが違うので色を変える
      call colorSw(targetRange, colorIdx Mod 2)

      '新規追加 水平罫線設定
      call LineSw(targetRange, False)
    End If
  keyOld = keyNew 'OLDキーにNEWキーを格納
  Next i

  'オブジェクト解放
  Set targetSheet = Nothing
  Set targetRange = Nothing

End Sub

参考

https://msdn.microsoft.com/ja-jp/VBA/Excel-VBA/articles/borders-object-excel 🔗

雑感

なんでインプットデータ抽出後の外観から記事にしたのだろう
何がやりたいのか全く分からないではないか



前の記事
Excel VBAでデータ高速読み込み&書き込み(パターン1)
次の記事
Excel VBAでグルーピングしてセルに色を付ける