【VBAリファレンス】VBAサンプル集罫線を簡単に引く(Borders,BorderAround)

スポンサーリンク

はい、承知いたしました。Excel VBAで罫線を簡単に引く方法について、ベテラン講師の視点から、技術ブログ記事として詳細かつ実践的な内容で執筆します。

### VBAサンプル集:罫線を簡単に引く(Borders, BorderAround)

Excelでのデータ分析やレポート作成において、表の可読性を高めるための罫線引きは非常に重要な作業です。手作業で一つ一つ罫線を引くのは、データ量が多い場合や頻繁に更新が必要な場合に膨大な時間を要します。しかし、Excel VBA(Visual Basic for Applications)を活用すれば、この作業を劇的に効率化することができます。

本記事では、Excel VBAの`Borders`オブジェクトと`BorderAround`メソッドに焦点を当て、罫線をプログラムで自在に操るための基本的な知識から、実務で役立つ応用的なテクニックまでを、豊富なサンプルコードとともに解説します。ベテランVBA講師としての経験に基づき、初心者の方でも理解しやすく、かつ経験者の方にも新たな発見があるような、圧倒的な情報量を目指します。

### 罫線設定の基礎:`Borders`オブジェクトとは

Excel VBAで罫線を操作する際の中心となるのが、`Range`オブジェクトの`Borders`プロパティです。この`Borders`プロパティは、指定したセル範囲のすべての罫線属性を管理するためのコレクションオブジェクトを返します。

`Borders`オブジェクトを通じて、個々の罫線(上、下、左、右、斜め線など)に対して、線の種類(実線、破線など)、太さ、色などを設定できます。

**`Borders`オブジェクトの主なメンバー**

* **`Borders(line_style)`**: 特定の罫線にアクセスするためのプロパティです。`line_style`には、以下の定数を使用します。
* `xlEdgeTop`: 上辺の罫線
* `xlEdgeBottom`: 下辺の罫線
* `xlEdgeLeft`: 左辺の罫線
* `xlEdgeRight`: 右辺の罫線
* `xlInsideVertical`: 内部の縦罫線
* `xlInsideHorizontal`: 内部の横罫線
* `xlDiagonalUp`: 右下がり斜め罫線
* `xlDiagonalDown`: 右上がり斜め罫線

* **`LineStyle` プロパティ**: 罫線の種類を設定します。
* `xlContinuous`: 実線
* `xlDash`: 短い破線
* `xlDashDot`: 一点鎖線
* `xlDashDotDot`: 二点鎖線
* `xlDot`: 点線
* `xlDouble`: 二重線
* `xlLineStyleNone`: 罫線なし

* **`Weight` プロパティ**: 罫線の太さを設定します。
* `xlThin`: 細線
* `xlMedium`: 中線
* `xlThick`: 太線
* `xlHairline`: 髪の毛のような細線(環境依存の場合あり)

* **`Color` プロパティ**: 罫線の色を設定します。RGB値や`ColorIndex`定数を使用します。
* 例: `vbBlack` (黒), `RGB(255, 0, 0)` (赤)

* **`ColorIndex` プロパティ**: Excelのカラーパレットに基づいた色を設定します。
* 例: `3` (赤), `1` (黒), `5` (青)

### `BorderAround`メソッドによる一括設定

`Borders`オブジェクトを使って個別に罫線を設定することも可能ですが、指定した範囲全体に外枠の罫線を一括で設定したい場合、`BorderAround`メソッドが非常に便利です。

`Range`オブジェクトの`BorderAround`メソッドは、指定した範囲の周囲に罫線を引くためのショートカットのようなものです。このメソッドは、`LineStyle`、`Weight`、`Color`といった罫線の属性を引数として受け取ります。

**`BorderAround`メソッドの構文**

expression.BorderAround(LineStyle, Weight, Color, ColorIndex)

* `expression`: `Range`オブジェクトを指定します。
* `LineStyle`: 罫線の種類(上記参照)。省略可能。
* `Weight`: 罫線の太さ(上記参照)。省略可能。
* `Color`: 罫線の色(RGB値など)。省略可能。
* `ColorIndex`: 罫線の色(`ColorIndex`)。`Color`と同時に指定した場合、`Color`が優先されることがあります。

`BorderAround`メソッドは、特に「範囲全体に太い黒の実線の外枠を引く」といった、よく使われる設定を簡潔に記述できるため、コードの可読性と保守性を向上させます。

### サンプルコード集:実践的な罫線引きテクニック

それでは、具体的なVBAコードを見ていきましょう。これらのサンプルは、Excel VBAでの罫線引きの基本から応用までを網羅しています。

#### サンプル1:指定範囲に太い黒の実線の外枠を引く

最も基本的な使い方です。`BorderAround`メソッドを使用します。

Sub Sample_BorderAround_ThickBlack()

Dim targetRange As Range

‘ 罫線を引く対象範囲を設定 (例: A1からC5)
Set targetRange = ThisWorkbook.Sheets(“Sheet1”).Range(“A1:C5”)

‘ BorderAroundメソッドで外枠に太い黒の実線を描画
‘ LineStyle:=xlContinuous (実線), Weight:=xlThick (太線), Color:=vbBlack (黒)
targetRange.BorderAround LineStyle:=xlContinuous, Weight:=xlThick, Color:=vbBlack

MsgBox “指定範囲に太い黒の実線の外枠が引かれました。”, vbInformation

End Sub

**解説:**
`targetRange.BorderAround LineStyle:=xlContinuous, Weight:=xlThick, Color:=vbBlack` の部分で、`A1:C5` の範囲全体に、実線で、太く、黒色の外枠が引かれます。引数名を明示する `:=` を使うことで、コードの意図がより明確になります。

#### サンプル2:指定範囲に細い実線の内枠を引く

`Borders`オブジェクトの`xlInsideVertical`と`xlInsideHorizontal`を使用します。

Sub Sample_Borders_InsideThin()

Dim targetRange As Range

‘ 罫線を引く対象範囲を設定 (例: A1からC5)
Set targetRange = ThisWorkbook.Sheets(“Sheet1”).Range(“A1:C5”)

‘ 内部の横罫線に細い実線を描画
With targetRange.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous ‘ 実線
.Weight = xlThin ‘ 細線
.Color = vbBlack ‘ 黒色
End With

‘ 内部の縦罫線に細い実線を描画
With targetRange.Borders(xlInsideVertical)
.LineStyle = xlContinuous ‘ 実線
.Weight = xlThin ‘ 細線
.Color = vbBlack ‘ 黒色
End With

MsgBox “指定範囲に細い実線の内枠が引かれました。”, vbInformation

End Sub

**解説:**
`With…End With`ブロックを使うことで、同じオブジェクト(ここでは`targetRange.Borders(xlInsideHorizontal)`や`targetRange.Borders(xlInsideVertical)`)に対する複数のプロパティ設定を簡潔に記述できます。これにより、コードのネストが減り、読みやすくなります。

#### サンプル3:特定のセルにのみ二重線と点線で色付きの罫線を引く

個別の罫線に対して、異なるスタイルや色を設定する例です。

Sub Sample_Borders_Specific()

Dim targetCell As Range

‘ 罫線を引く対象セルを設定 (例: B2)
Set targetCell = ThisWorkbook.Sheets(“Sheet1”).Range(“B2”)

‘ セルB2の下辺に二重線(赤色)を設定
With targetCell.Borders(xlEdgeBottom)
.LineStyle = xlDouble ‘ 二重線
.Weight = xlMedium ‘ 中程度の太さ
.Color = RGB(255, 0, 0) ‘ 赤色 (RGB指定)
End With

‘ セルB2の右辺に点線(青色)を設定
With targetCell.Borders(xlEdgeRight)
.LineStyle = xlDot ‘ 点線
.Weight = xlThin ‘ 細線
.ColorIndex = 5 ‘ 青色 (ColorIndex指定)
End With

MsgBox “セルB2に二重線と点線が引かれました。”, vbInformation

End Sub

**解説:**
`xlEdgeBottom`(下辺)と`xlEdgeRight`(右辺)に対して、それぞれ異なる罫線スタイルと色を設定しています。色の指定には`RGB()`関数や`ColorIndex`プロパティが利用できます。`Color`プロパティはより柔軟な色指定が可能です。

#### サンプル4:表全体を自動で囲み、内部罫線も設定する

データ範囲を動的に取得し、罫線を適用する実用的な例です。

Sub Sample_AutoBorder_Table()

Dim ws As Worksheet
Dim dataRange As Range

‘ 対象シートを設定
Set ws = ThisWorkbook.Sheets(“Sheet1”)

‘ データ範囲を自動で取得 (A1セルからデータが入力されている最終セルまで)
‘ CurrentRegionは、連続したデータの塊を範囲として取得します。
‘ もしヘッダー行が1行だけで、データがその下にある場合は、Set dataRange = ws.Range(“A1”).CurrentRegion のようにします。
‘ もしヘッダー行がなく、A1から始まるデータ範囲の場合は、Set dataRange = ws.Range(“A1”).CurrentRegion で問題ありません。
‘ より厳密に、特定の列(例: A列)の最終行を基準にする場合は、ws.Cells(Rows.Count, “A”).End(xlUp) などを使います。
On Error Resume Next ‘ データがない場合のエラーを回避
Set dataRange = ws.Range(“A1”).CurrentRegion
On Error GoTo 0 ‘ エラーハンドリングを元に戻す

‘ データ範囲が取得できたか確認
If dataRange Is Nothing Then
MsgBox “データ範囲が見つかりませんでした。”, vbExclamation
Exit Sub
End If

‘ 念のため、既存の罫線をすべてクリア
dataRange.Borders.LineStyle = xlLineStyleNone

‘ 全体の外枠に太い黒の実線を設定
dataRange.BorderAround LineStyle:=xlContinuous, Weight:=xlThick, Color:=vbBlack

‘ 内部の縦罫線と横罫線に細い黒の実線を設定
With dataRange.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = vbBlack
End With
With dataRange.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = vbBlack
End With

MsgBox “データ範囲に自動で罫線が引かれました。”, vbInformation

End Sub

**解説:**
`ws.Range(“A1”).CurrentRegion` は、A1セルを起点として、上下左右に連続したデータがある範囲を自動的に検出してくれます。これにより、毎回手動で範囲を指定する必要がなくなり、非常に便利です。既存の罫線をクリアしてから設定することで、意図しない罫線が残るのを防いでいます。

#### サンプル5:罫線の色を条件によって変える(応用)

条件付き書式のようなことをVBAで行う例です。ここでは、特定の値が含まれる行にのみ、強調表示のための罫線を引きます。

Sub Sample_ConditionalBorder()

Dim ws As Worksheet
Dim dataRange As Range
Dim lastRow As Long
Dim i As Long

Set ws = ThisWorkbook.Sheets(“Sheet1”)

‘ データ範囲を取得 (A列の最終行までを想定)
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
If lastRow < 2 Then ' ヘッダー行しかない、またはデータがない場合 MsgBox "罫線を引くデータがありません。", vbInformation Exit Sub End If Set dataRange = ws.Range("A1:D" & lastRow) ' 例としてA列からD列まで ' 既存の罫線をクリア dataRange.Borders.LineStyle = xlLineStyleNone ' 全体の外枠と内部罫線(標準設定) dataRange.BorderAround LineStyle:=xlContinuous, Weight:=xlThin, Color:=RGB(200, 200, 200) ' 薄いグレー With dataRange.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .Color = RGB(200, 200, 200) End With With dataRange.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .Color = RGB(200, 200, 200) End With ' 条件設定:C列の値が「重要」の場合、その行の下辺に太い赤線を追加 For i = 2 To lastRow ' 2行目から最終行までループ (1行目はヘッダーと仮定) If ws.Cells(i, "C").Value = "重要" Then ' その行のC列セル(またはデータ範囲の右端セル)に罫線を引く ' ここでは、データ範囲の右端セル(D列)の下辺に設定する例 With ws.Cells(i, "D").Borders(xlEdgeBottom) .LineStyle = xlContinuous ' 実線 .Weight = xlThick ' 太線 .Color = vbRed ' 赤色 End With End If Next i MsgBox "条件付きで罫線が設定されました。", vbInformation End Sub **解説:** このサンプルでは、ループ処理を使って各行をチェックし、条件に合致した場合にのみ特定の罫線(この場合は行の下辺に太い赤線)を追加しています。これにより、条件付き書式では実現できないような、より複雑な罫線設定をVBAで実現できます。 ### 実務アドバイス:より効率的・効果的な罫線引きのために 1. **既存の罫線のクリア:** 新しく罫線を引く前に、`Range.Borders.LineStyle = xlLineStyleNone` で既存の罫線をすべてクリアすることを習慣づけましょう。これにより、意図しない罫線が重なって表示されるのを防ぎ、常にきれいな状態を保てます。 2. **`With`ステートメントの活用:** 同じ`Range`オブジェクトや`Borders`オブジェクトに対して複数のプロパティを設定する場合、`With...End With`ステートメントを使用すると、コードが簡潔になり、処理速度も若干向上します。 3. **`BorderAround`と`Borders`の使い分け:** * 範囲全体の**外枠**に同じ罫線を引く場合は、`BorderAround`が最も手軽でコードも短くなります。 * 範囲の**内部**に罫線を引く場合や、**個々の辺**(上、下、左、右)に異なる罫線を設定したい場合は、`Borders`オブジェクト(例: `Borders(xlInsideHorizontal)`, `Borders(xlEdgeTop)`)を使用します。 4. **色指定の柔軟性:** `Color`プロパティ(`RGB()`関数など)は、Excelのカラーパレットにない色も指定できるため、よりデザイン性の高い罫線設定が可能です。`ColorIndex`は手軽ですが、色数が限られます。 5. **動的な範囲取得:** `CurrentRegion`や`End(xlUp)`/`End(xlDown)`プロパティを駆使して、データ範囲を動的に取得するようにしましょう。これにより、コードを修正することなく、異なるデータ範囲に罫線を適用できるようになります。 6. **エラーハンドリング:** 範囲が取得できなかったり、予期せぬデータ形式だったりする場合に備え、`On Error Resume Next` や `On Error GoTo 0` を適切に使用して、マクロが途中で停止しないように工夫しましょう。 7. **パフォーマンス:** 非常に広範囲のセルに罫線を設定する場合、VBAの処理にはそれなりに時間がかかることがあります。画面更新を停止する `Application.ScreenUpdating = False` や、計算を一時停止する `Application.Calculation = xlCalculationManual` をコードの最初と最後に設定することで、処理速度を大幅に向上させることができます。 Sub Sample_Performance() Application.ScreenUpdating = False ' 画面更新を停止 Application.Calculation = xlCalculationManual ' 計算を停止 ' --- ここに罫線引きのコードを記述 --- Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ws.Range("A1:Z1000").BorderAround xlContinuous, xlThin, vbBlack ' 例 ' --- 罫線引きのコード終了 --- Application.Calculation = xlCalculationAutomatic ' 計算を自動に戻

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