4本目「定数値のセルのみ削除」を学ぶ
暑い日が続きますね、もう4本目にして頭が沸騰しそうです。ですが、まだ4/」100です!まだまだ脳みそ酷使し倒してやりましょう
お題
試しに以下のデータを作成しました。
緑色の見出し行とNo列、黄色の数式が入っている領域は消さないように注意します。
それでは、早速やっていきます!
基礎知識
今回の範囲選択は3本目の応用になります。前回のお題では、CurrentRegionで連結したブロックとして表を捉えて、それをoffset(1,1)で、斜めに移動させて見出しを範囲の外に出しました。今回はそれに加えて新たに、「セルに入っているものは定数か数式かの選別」を組み込む必要があります。
SpecialCells
指定した種類と値に一致するすべてのセルを表すRangeオブジェクトを返します。
Rangeオブジェクト.SpecialCells(Type, Value)
SpecialCellsの引数の中でも特に使用頻度が高いと思われるものは以下の通りです。(sがつくつかないは要注意です。SpecialCellsはつきますが、引数のCellにはsがつきません)
- 定数 xlCellTypeConstants
- 数式 xlCellTypeFormulas
- 空白 xlCellTypeblank
- コメント xlCellTypeComments
On Error Resume Next
SpecialCellsでは引数が条件を満たしていなければエラーが発生します。このエラーが発生したときのため、「それ予期してたエラーだから止まらないで、とばして次いっちゃってー」っと一言命令しときます。急に予期せぬエラーがでたらプログラムもびっくりあたふたしちゃうので^^
では、以下で実際に使ってみます。
回答
変数の宣言が冒頭から出てきました。
rngという変数を使いたいです、と書くときに「Dim rng as データ型」
と書きます。
データ型はたくさんありますが、最初に覚えるべきは
- 整数 Long
- 文字列 String
- 小数 Double
です。それ以外にもオブジェクトを入れられる型として
Range型やWorksheet型などあります。ここではRangeを格納できるRange型として変数rngを定義しています。ただルールとして、オブジェクト変数にオブジェクトを格納するときは必ずSet をつけなければいけません。データ型の記述を省略すると(例 Dim rng)
なんでも入るVariant型になります。変数を使う時は、できるだけデータ型を指定し、変数を定義したいと思います。
Dim rng As Range 'Rnageオブジェクトを宣言する
Set rng = Worksheets("Sheet1").Range("A1").CurrentRegion.offset(1,1) 'B2:E13の範囲が変数に格納される
On Error Resume Next 'エラーが出てもとまらず次の処理に移行するために必要な記述
rng.SpecialCells(xlCellTypeConstants).ClearContents 'セルが定数値なら消す
実行してみると以下のとおり、数値セルだけ削除することができた。お題クリアー!
今回学んだこと総括
変数の宣言はDIm、データ型は整数Long・文字列String・小数Double
On Error Resume NextとRangeオブ.SpeacialCells(xlCellType~~)の組み合わせコンボでセルに何が入っているかがわかり、入っているセルだけに特定の処理を与えることができた(今回で言えば削除)