Excel VBA 逆引き集 | 定数セル

Excel VBA
スポンサーリンク

定数セルを処理

Excel VBAで「数式セル」だけでなく「定数セル(直接入力された値)」だけを対象にしたい場面があります。
例えば「数式はそのままにして、入力値だけ色付けしたい」「フィルタ後の定数セルだけ処理したい」といったケースです。
このとき便利なのが SpecialCells(xlCellTypeConstants)AutoFilter の組み合わせです。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • SpecialCells(xlCellTypeConstants)
    → 範囲内の「定数セル(直接入力された値)」だけを抽出。
  • SpecialCells(xlCellTypeVisible)
    → フィルタや非表示を無視して「見えているセル」だけ対象。
  • 組み合わせると強力
    → 「フィルタ後の定数セルだけ処理」が可能。
  • エラー処理が必須
    → 対象セルがない場合はエラーになるので On Error Resume Next を入れる。

テンプレ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 SumConstants()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("C2:C50")

    Dim constRg As Range
    On Error Resume Next
    Set constRg = rg.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If Not constRg Is Nothing Then
        MsgBox "定数セルの合計=" & WorksheetFunction.Sum(constRg)
    End If
End Sub
VB
  • ポイント:
    • 数式の結果は含めず、直接入力された数値だけ合計。

テンプレ3:AutoFilter+定数セルだけ処理

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.Font.Color = vbRed
    End If

    ' フィルタ解除
    ws.AutoFilterMode = False
End Sub
VB
  • ポイント:
    • フィルタで「東京」だけ表示。
    • さらに「定数セルだけ赤文字」に。

テンプレ4:定数セルだけループ処理

Sub LoopConstants()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("B2:B20")

    Dim constRg As Range, c As Range
    On Error Resume Next
    Set constRg = rg.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If Not constRg Is Nothing Then
        For Each c In constRg
            c.Value = c.Value & "★"
        Next c
    End If
End Sub
VB
  • ポイント:
    • 定数セルだけに「★」を付ける。
    • 数式セルは対象外。

例題で練習

'例1:定数セルだけ色付け
Sub Example1()
    HighlightConstants
End Sub

'例2:定数セルだけ合計
Sub Example2()
    SumConstants
End Sub

'例3:フィルタ後の定数セルだけ処理
Sub Example3()
    FilterAndConstants
End Sub

'例4:定数セルだけループ処理
Sub Example4()
    LoopConstants
End Sub
VB

初心者向けポイント

  • xlCellTypeConstants → 入力値だけ対象。
  • xlCellTypeFormulas → 数式セルだけ対象。
  • xlCellTypeVisible → フィルタや非表示を無視して「見えているセル」だけ対象。
  • 組み合わせると強力 → 「フィルタ後の定数セルだけ処理」が可能。
  • エラー処理を忘れない → 対象セルがないとエラーになる。

👉 この「SpecialCells / AutoFilter × 定数セルテンプレ」を覚えておけば、Excel VBAで 入力値だけを対象にした処理やフィルタ後の定数セル操作 を高速に実務へ応用できます。

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