関数・メソッド

特定条件に該当するセルを抽出する【SpecialCellsメソッド】【ExcelVBA】

構文

Object.SpecialCells (Type, Value)

Type ・・・取得するセルの種類を指定(後述の表を参照)
Value・・・取得するセルが定数もしくは数式の場合に、特定の抽出条件を指定(後述の表を参照)
戻り値 ・・・・・Boolean型 Object型ならTrue/Object型でなければFalse
ある特定の条件に該当するセル(Cells , Range)をまとめて抽出したい場合は SpecialCells メソッドを使用します。
基本的に、引数Typeに下表の定数を抽出条件として、設定し使用します。
引数名 省略 定数/データ型 説明
Type 不可 xlCellTypeAllFormatConditions 表示形式が設定されているセル
xlCellTypeAllValidation 条件の設定が含まれているセル
xlCellTypeBlanks 空白セル
xlCellTypeComments コメントが含まれているセル
xlCellTypeConstants 定数が含まれているセル
xlCellTypeFormulas 数式が含まれているセル
xlCellTypeLastCell 使われたセル範囲内の最後のセル
xlCellTypeSameFormatConditions 同じ表示形式が設定されているセル
xlCellTypeSameValidation 同じ条件の設定が含まれているセル
xlCellTypeVisible すべての可視セル
Value Variant型 Type に xlCellTypeConstants
または xlCellTypeFormulas を設定した場合、
特定の種類の定数や数式を含むセルだけを取得できます。
省略すると、すべての定数および数式が対象になります。

SpecialCellsメソッドのサンプルコード

'■アクティブシートの数式セルのみロック状態にしてシートを保護する
 Public Sub sample()
    
    '■シート保護を解除、全セルのロックを解除する
    ActiveSheet.Unprotect
    ActiveSheet.Cells.Locked = False
    
    '■数式が含まれているセルのみをロックする
    On Error Resume Next
    ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas).Locked = True
    
    '上記条件に満たさない場合は下記エラーが発生します。その為、On Error Resume Nextとしましょう
    '実行時エラー1004
    'アプリケーション定義またはオブジェクト定義のエラーです。
    
    '■シートを保護する
    On Error GoTo 0
    ActiveSheet.Protect

End Sub

注意点

  • ObjectがRange(“A1”)のような単一セルの場合、SpecialCellsメソッドはシート全体のセルを対象に抽出を行うという仕様があるようです。
  • Objectが動的なセル範囲となる場合、この仕様によりマクロ開発者が意図しない範囲のセルを抽出してしまう可能性があり、マクロの実装によっては、ユーザの大事なデータを削除してしまうことになってしまうかもしれません。
  • Objectが動的なセル範囲となる場合は、Object.Count が 1 の場合は処理を行わないというような排他処理を実装した方が良いでしょう。

関連記事

セルをロックする【Lockedプロパティ】【ExcelVBA】

 

コメント