関数・メソッド

特定条件に該当するセルを抽出する【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すべての可視セル
ValueVariant型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】

 

コメント

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