特殊セルまとめテンプレ
Excel VBAで大量データを扱うとき「特定のセルだけ処理したい」場面は多いです。
通常のループで判定すると遅くなりますが、SpecialCells を使えば一気に対象セルを抽出できるので高速化できます。さらに AutoFilter と組み合わせると「フィルタ後の特殊セルだけ処理」も可能です。ここでは初心者向けに、代表的な特殊セルのテンプレートをまとめて紹介します。
基本の考え方
- 特殊セルの種類
xlCellTypeConstants→ 入力値セル(直接入力された値)xlCellTypeFormulas→ 数式セルxlCellTypeBlanks→ 空白セルxlCellTypeFormulas, xlErrors→ エラーセルxlCellTypeVisible→ フィルタや非表示を無視して「見えているセル」だけ
- 組み合わせ例
Range.SpecialCells(xlCellTypeConstants)→ 定数セルだけRange.SpecialCells(xlCellTypeFormulas).SpecialCells(xlCellTypeVisible)→ フィルタ後の数式セルだけ
テンプレ1:定数セルだけ色付け
Sub HighlightConstants()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A1:D20")
Dim constRg As Range
On Error Resume Next
Set constRg = rg.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not constRg Is Nothing Then
constRg.Interior.Color = vbYellow
End If
End Sub
VBテンプレ2:数式セルだけ赤文字に
Sub HighlightFormulas()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A1:D20")
Dim formulaRg As Range
On Error Resume Next
Set formulaRg = rg.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not formulaRg Is Nothing Then
formulaRg.Font.Color = vbRed
End If
End Sub
VBテンプレ3:空白セルに「未入力」と書き戻し
Sub FillBlanks()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("B2:B20")
Dim blankRg As Range, c As Range
On Error Resume Next
Set blankRg = rg.SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not blankRg Is Nothing Then
For Each c In blankRg
c.Value = "未入力"
Next c
End If
End Sub
VBテンプレ4:エラーセルを「0」に置き換え
Sub ReplaceErrors()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("C1:C20")
Dim errRg As Range, c As Range
On Error Resume Next
Set errRg = rg.SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0
If Not errRg Is Nothing Then
For Each c In errRg
c.Value = 0
Next c
End If
End Sub
VBテンプレ5:フィルタ後の特殊セルだけ処理(例:定数セル)
Sub FilterAndConstants()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A1:C20")
' A列で「東京」だけフィルタ
rg.AutoFilter Field:=1, Criteria1:="東京"
Dim constRg As Range
On Error Resume Next
Set constRg = rg.SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not constRg Is Nothing Then
constRg.Interior.Color = vbGreen
End If
' フィルタ解除
ws.AutoFilterMode = False
End Sub
VB例題で練習
'例1:定数セルだけ色付け
Sub Example1()
HighlightConstants
End Sub
'例2:数式セルだけ赤文字
Sub Example2()
HighlightFormulas
End Sub
'例3:空白セルに「未入力」と書き戻し
Sub Example3()
FillBlanks
End Sub
'例4:エラーセルを「0」に置き換え
Sub Example4()
ReplaceErrors
End Sub
'例5:フィルタ後の定数セルだけ処理
Sub Example5()
FilterAndConstants
End Sub
VB初心者向けポイント
- 特殊セルの種類を覚える → 定数・数式・空白・エラー。
- AutoFilterと組み合わせると強力 → 条件で絞り込んだ後に対象セルだけ処理可能。
- 高速化の理由 → 1行ずつ判定せず、一括で対象セルを抽出できる。
- エラー処理を忘れない → 対象セルがないとエラーになるので
On Error Resume Nextを必ず入れる。
👉 この「特殊セルまとめテンプレ」を覚えておけば、Excel VBAで 定数・数式・空白・エラーセルを高速に処理 でき、さらにフィルタ後のデータにも応用できます。
