注目キーワード
  1. VBA
  2. 関数
  3. ショートカット

【VBA】SpecialCellsメソッドで特定の種類のセルを指定する方法【入門】

  • 2019年3月1日
  • 2019年4月5日
  • VBA
  • 75回
  • 1件
VBA NO IMAGE

みなさん、こんにちは!

Excelで自動化をしていますか?

前回の記事ではVBAでの

表の全体を選択する方法と作業済みの領域を選択する方法を解説しました。

今回の記事では

SpecialCellsメソッドで特定の種類のセルを選択する方法を紹介します。

SpecialCellsメソッドを使えば複雑な条件で指定しなければいけない場面も簡潔に記述できます。

使用頻度も多いメソッドなのでぜひ、覚えてみてください。

SpecialCellsメソッドで特定の種類のセルを選択する

文字や数値などのデータが直接入力されてるセルや、数式の結果としてそれらのデータが表示されているセル、あるいは何も入力されていないセルなど、指定した種類のセルだけを自動的に判断し、Rangeオブジェクトとして取得することができます。

・文字列を返す数式セルのみ選択する

特定の種類のセルだけをRangeオブジェクトとして取得するには、Rangeオブジェクトを対象として「SpecialCellsメソッド」を使用します。このメソッドでは、「Type」と「Value」という2つの引数を指定します。Typeにはセルの種類を定数で指定します。ValueにはTypeで選択した定数のデータ型を指定します。

Typeで指定する定数

定数 取得するセル
xlCellTypeAllFormatConditions 表示形式が設定されているセル
xlCellTypeAllValidation 条件の設定が含まれているセル
xlCellTypeBlanks 空白のセル
xlCellTypeComments コメントが含まれているセル
xlCellTypeConstants 定数が含まれているセル
xlCellTypeFormulas 数式が含まれているセル
xlCellTypeLastCell 使われたセル範囲内の最後のセル
xlCellTypeSameFormatConditions 同じ表示形式が設定されているセル
xlCellTypeSameValidation 同じ条件の設定が含まれるセル
xlCellTypeVisible すべての可視セル

Valueで指定する定数

定数 データ型
xlNumbers 数値
xlTextValues 文字列
xlLogical 論理値
xlErrors エラー値

・実行結果

上記のコードの場合は空白文字列(” “)を返している数式セルも選択されます。

 

数式セルの数値と文字列を選択する

SpecialCellsメソッドの引数Valueには、一度に複数の種類を指定することもできます。数式の結果が数値か文字列のいずれかであるセルを選択したい場合に使用します。その場合は、定数を「+」でつないで指定します。

・実行結果

 

範囲を限定して空白のセルを選択する

単独のセルを対象にこのメソッドを実行した場合、ワークシート全体から該当するセルを探します。一方、セル範囲を対象にこのメソッドを実行すると、その範囲内で該当するセルを探します。

・実行結果

設定した範囲内のセルだけを選択する

あらかじめ基本のセル範囲を決めておき、別に指定したセルのうつ、基本の範囲に含まれる部分だけを操作対象にすることができます。言いかたを変えると、指定した2つのセル範囲に胸中する部分だけをRangeオブジェクトとして取得できます。

設定したセル範囲に共通する範囲だけを選択する

たとえば、作業を行う範囲をあらかじめ決めていた場合に、異なるセル範囲を選択した状態でマクロを実行すると、決めていたセル範囲に含まれていないセルは選択を解除され、範囲内のセルだけが改めて選択されます。「Intersectメソッド」の引数に複数のRangeオブジェクトを指定すると、それらの共通した部分だけが、Rangeオブジェクトとして返されます。

・実行結果

共通部分がない場合

Intersectメソッドの引数に指定した複数のセル範囲に共通部分がない場合、戻り値としてRangeオブジェクトは返されません。この結果に対してSelectメソッドを実行すると、エラーが発生してしまい、このエラーを防ぐにはIntersectメソッドの戻り値を変数にセットしてIfスタートメントでNothing判定をしてからSelectメソッドを実行するとエラーを防げます。

 

指定した範囲を追加選択する

あらかじめ基本のセル範囲を決めて置き、それにセル範囲を追加して、そのすべての葉にを操作対象とすることができます。言いかたを変えると、複数のセル範囲を融合し、1つのRangeオブジェクトとして取得できます。

別の表も含めて再選択する

セル範囲を選択た状態で下記のマクロを実行すると、現在の選択範囲に加えて、あらかじめ決めておいた別の表の範囲も同時に選択できます。「Unionメソッド」の引数に複数のRangeオブジェクトを指定すると、それらすべてのセル範囲が、1つのRangeオブジェクトとして返されます。

セル範囲の融合

Unionメソッドで複数のセル範囲を融合すると、1つの長方形の範囲に収まる複数のセルは、自動的に1つの領域にまとめられます。たとえばUnionメソッドの引数にA1,A2,B1,B2のセルを表すRangeオブジェクトを指定すると「A1:B2」のセルを表すRangeオブジェクトになります。

・実行結果

まとめ

今回は、SpecialCellsメソッドで特定の種類のセルを選択する方法を紹介しました。

使用頻度は多めなメソッドですので、引数をすべて覚える必要はないですが使いかたを覚えれば、

簡単に記述できる場面が多いので繰り返し使ってみてください。

前の記事から読み直す場合はこちらです。

【VBA】表全体や作業済みの領域を選択する【入門】

VBAの記事一覧はこちらからです。

【基礎から学べる】ExcelマクロとVBA【入門】

NO IMAGE
最新情報をチェックしよう!