特定のセルとは
セルにはいろいろな値を設定することが出来ます。
数値や文字だけでなく、条件付き書式や数式や定数やコメントや入力規則が設定されていることもあります。また、値を設定していない空白セルもあります。数式のセルの場合はエラーのセルもあります。
それらのセルを「特定のセル」と呼びます。
Excelでの特定セルの選択
Excelで特定のセルを選択するには、ホームタブ→検索と選択 を開き、選択したいセルの種類を選びます。
「条件を選択してジャンプ」を選択するとさらに詳細のダイアログが表示されます。
見つからない場合は警告メッセージが表示されます。
SpecialCellsメソッド
上記のように、Excelの操作で特定セルの選択を行うことが出来ます。
VBAではSpecialCellsメソッドを利用することで特定セルの判別が可能です。
SpecialCellsメソッドは引数によって参照するセルの種類が変わります。
構文
1 |
Rangeオブジェクト.SpecialCells(Type, [Value]) |
設定項目
- 親オブジェクト
セル範囲を示すRangeオブジェクトを親オブジェクトとして指定します。単一セル、複数セル範囲のどちらでも指定可能です。省略できません。 - Type
セルの種類を指定します。指定はXlCellType列挙型の定数を使用します。条件付き書式のセルはxlCellTypeAllFormatConditionsを設定します。複数の定数を同時に指定することは出来ません。定数 設定内容 xlCellTypeAllFormatConditions 条件付き書式が設定されているセルを対象とします xlCellTypeAllValidation 入力規則が設定されているセルを対象とします xlCellTypeBlanks 空白セルを対象とします xlCellTypeComments コメントが設定されているセルを対象とします xlCellTypeConstants 定数(数値、文字、論理値、エラー値のいずれか、または全て)が設定されているセルを対象とします。エラー値はセルにエラー値が直接入力されているものが対象になるため数式でエラーになっているものは含みません。 xlCellTypeFormulas 数式(数値、文字、論理値、エラー値のいずれか、または全て)が設定されているセルを対象とします。エラー値は数式の結果エラーになっているものが対象になるため直接入力でエラーになっているものは含みません。 xlCellTypeLastCell セル範囲の最後セルを対象とします xlCellTypeSameFormatConditions 同じ条件付き書式が設定されているセルを対象とします xlCellTypeSameValidation 同じ入力規則が設定されているセルを対象とします xlCellTypeVisible 表示されている全てのセルを対象とします - Value
TypeにxlCellTypeConstants(定数)、または、xlCellTypeFormulas(数式)を指定している場合に利用します。エラー値、論理値、数値、文字の4つをxlSpecialCellsValue列挙型から選択します。複数指定が可能です。数値と文字の2つを設定したい場合など、複数設定する場合は、定数を+でつなげます。定数 設定内容 xlErrors エラー値(#DIV/0!、#N/A、#NAME?、#NULL!、#NUM!、#REF!、#VALUE!) xlLogical 論理値(TRUEまたはFALSE) xlNumbers 数値 xlTextValues 文字
注意点
特定のセルを判別する場合、複数の条件に一致する場合があります。それらについて補足します。
発生頻度が多い3パターンを以下に示していますが、他にも複合パターンはいくつもあります。そのため思わぬセルが抽出される場合があります。実際にコードを書く場合はシートの内容と照らし合わせて望んでいるセルが抽出できる条件なのかを確認してください。
条件付き書式と定数は同一抽出ができる
条件付き書式が設定されてあり、かつ、そのセルの値が定数の場合、xlCellTypeAllFormatConditions(条件付き書式)とxlCellTypeConstants(定数)のどちらの場合も抽出対象になります。
条件付き書式と数式は同一抽出ができる
条件付き書式が設定されてあり、かつ、そのセルの値が数式の場合、xlCellTypeAllFormatConditions(条件付き書式)とxlCellTypeFormulas(数式)のどちらの場合も抽出対象になります。
定数と数式は同一抽出はできない
「3」という表示のセルがあったとします。これは定数として直接入力している場合と、数式の算出結果の場合の2通りがありますが、xlCellTypeConstants(定数)の場合とxlCellTypeFormulas(数式)の場合のそれぞれの場合でしか抽出されません。
サンプルコード
各種特定セルの取得
引数Typeの全パターンです。抽出セルを変数rに入れているだけなので、それ以降の処理については次のコードを参考にしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Sub SpecialCellsTest() '// エラー発生時はエラーを無視して次処理を行う On Error Resume Next Dim r As Range Dim rSpecialCells As Range Dim rCell As Range '// セル範囲を指定 Set r = Range("A1:D5") '// 条件付き書式 Set rSpecialCells = r.SpecialCells(xlCellTypeAllFormatConditions) '// 入力規則 Set rSpecialCells = r.SpecialCells(xlCellTypeAllValidation) '// 空白セル Set rSpecialCells = r.SpecialCells(xlCellTypeBlanks) '// コメント Set rSpecialCells = r.SpecialCells(xlCellTypeComments) '// 定数 Set rSpecialCells = r.SpecialCells(xlCellTypeConstants) Set rSpecialCells = r.SpecialCells(xlCellTypeConstants, xlErrors) Set rSpecialCells = r.SpecialCells(xlCellTypeConstants, xlLogical) Set rSpecialCells = r.SpecialCells(xlCellTypeConstants, xlNumbers) Set rSpecialCells = r.SpecialCells(xlCellTypeConstants, xlTextValues) Set rSpecialCells = r.SpecialCells(xlCellTypeConstants, xlErrors + xlLogical) '// 数式 Set rSpecialCells = r.SpecialCells(xlCellTypeFormulas) Set rSpecialCells = r.SpecialCells(xlCellTypeFormulas, xlErrors) Set rSpecialCells = r.SpecialCells(xlCellTypeFormulas, xlLogical) Set rSpecialCells = r.SpecialCells(xlCellTypeFormulas, xlNumbers) Set rSpecialCells = r.SpecialCells(xlCellTypeFormulas, xlTextValues) Set rSpecialCells = r.SpecialCells(xlCellTypeFormulas, xlErrors + xlLogical) '// 最終セル Set rSpecialCells = r.SpecialCells(xlCellTypeLastCell) '// 同じ条件付き書式 Set rSpecialCells = r.SpecialCells(xlCellTypeSameFormatConditions) '// 同じ入力規則 Set rSpecialCells = r.SpecialCells(xlCellTypeSameValidation) '// 表示セル Set rSpecialCells = r.SpecialCells(xlCellTypeVisible) End Sub |
条件付き書式のセル
条件付き書式が設定されているセルを抽出し、そのセルに斜め枠線を設定するサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub SpecialCellsConditionsTest() '// エラー発生時はエラーを無視して次処理を行う On Error Resume Next Dim r As Range Dim rSpecialCells As Range Dim rCell As Range '// セル範囲を指定 Set r = Range("A1:D5") '// 条件付き書式が設定されているセルを抽出 Set rSpecialCells = r.SpecialCells(xlCellTypeAllFormatConditions) '// 抽出したセルを全てループ For Each rCell In rSpecialCells '// 条件付き書式のセルに斜め線を入れる rCell.Borders(xlDiagonalDown).LineStyle = xlContinuous rCell.Borders(xlDiagonalUp).LineStyle = xlContinuous Next End Sub |
指定した特定のセルがない場合
SpecialCellsメソッドのType引数で指定した特定のセルが指定した範囲にない場合は実行時エラー1004になります。
エラー対応をしていない場合はそこで処理が止まってしまうため、SpecialCellsメソッドを使う場合はなんらかのエラー対応は入れておきましょう。
以下のコードは14行目でエラーを検出した場合は処理を抜けるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub SpecialCellsCommentsTest() '// エラー発生時はエラーを無視して次処理を行う On Error Resume Next Dim r As Range Dim rSpecialCells As Range Dim rCell As Range '// セル範囲を指定 Set r = Range("A1:D5") '// コメントが設定されているセルを抽出 Set rSpecialCells = r.SpecialCells(xlCellTypeComments) If (ERR.Number <> 0) Then '// エラー処理 Exit Sub End If End Sub |