Home > 即効テクニック > Excel VBA > セル操作関連のテクニック > 条件を指定してセルを参照する(SpecialCellsメソッド)

即効テクニック

セル操作関連のテクニック

条件を指定してセルを参照する(SpecialCellsメソッド)

(Excel 2000)
対象のセル範囲の中で、TypeとValueで指定した条件を全て満たしているセルを参照します。これはマニュアル操作での「[編集」-[ジャンプ]-[セル選択]」に含まれる機能です。以下に定数一覧とともに表示されるダイアログを図示しますので、機能の対応を確認してみてください。

・表A 引数Typeで指定する定数一覧(XlCellTypeクラス)
定数                              値      内容                  Valueの指定
xlCellTypeAllFormatConditions   -4172     すべての条件付き書式      ×
xlCellTypeAllValidation         -4174     すべての入力規則          ×
xlCellTypeBlanks                  4       空白セル                  ×
xlCellTypeComments              -4144     コメント                  ×
xlCellTypeConstants               2       定数                      ○
xlCellTypeFormulas              -4123     数式                      ○
xlCellTypeLastCell                11      最後のセル                ×
xlCellTypeSameFormatConditions  -4173     同じ条件付き書式          ×
xlCellTypeSameValidation        -4175     同じ入力規則              ×
xlCellTypeVisible                 12      可視セル                  ×

・表B 引数Valueで指定する定数一覧(XlSpecialCellsValueクラス)
定数            値	内容
xlErrors        16      エラー値
xlLogical        4      論理値
xlNumbers        1      数値
xlTextValues     2     文字
※Typeの指定がxlCellTypeConstantsクラスかxlCellTypeFormulasクラスの時だけ指定できます

 構文  Object.SpecialCells(Type, Value)

 設定項目 内容
  Object   Rangeオブジェクト
  Type     参照するセルの種類を指定                  (表A参照)[省略不可]
  Value    特定の種類の定数や数式を含むセルだけを参照(表B参照)[省略可能]

次のサンプルは、ワークシート名「集計結果」の[データ]−[集計]により計算された集計結果だけを別のシートにコピーするサンプルです。
●サンプル1●
Sub SpecialCellsSamp1()

  Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
     Destination:=Worksheets("集計結果").Range("A1")

End Sub
これを仮に、
    Range("A1").CurrentRegion.Copy _
       Destination:=Worksheets("集計結果").Range("A1")
とした場合、非表示になっている行も一緒にコピーされてしまいます。下記コードはサンプル2となります。
●サンプル2●
Sub SpecialCellsSamp2()

  Range("A1").CurrentRegion.Copy _
     Destination:=Worksheets("集計結果").Range("A1")

End Sub
●引数を組み合わせて使う方法
第2引数Valueは、複数の定数を組み合わせて使うことができます。その場合は、値を加算した結果を値として指定するか、定数同士を「+」演算子で加算させる式を記述します。
つまり、次の2つの結果は同じになります。
Value:=3

Value:=xlNumbers + xlTextValues