5/22/2017

Excel。マクロ007。表の中の空白セルや数式のセル以外を選択する方法【xlCellTypeBlanks】

Excel。マクロ007。表の中の空白セルや数式のセル以外を選択する方法

<VBA:xlCellTypeBlanks>


ExcelのVBAって難しくて…と事務職の方からよくいわれます。
確かに、VBAってプログラム言語ですから難しそうに感じますよね。
けど、VBAを知れば確かに効率的に作業できるし。
ということで、少しずつ慣れていくといいかと思います。

そして今回ご紹介するのは、
表の中の空白セル】を選択する方法をご紹介していきます。
前回までご紹介していた、範囲選択のアレンジって感じですね。

では、次の表があります。

この表の中で空白のセルを選択したいわけです。
Sub 空白セル()
    On Error GoTo エラー
    Range("a1", Range("a1").End(xlDown).End(xlToRight)).SpecialCells(xlCellTypeBlanks).Select
    Exit Sub
 
エラー:
    MsgBox Err.Description
End Sub

この手のVBAですが、まず用意しておきたいものがあります。
それが、エラーに関してです。
空白のセルがなかった場合ということも当然考えられますよね。

なので、
    On Error GoTo エラー
は、エラーだったら、エラーってところにジャンプしてね。という意味です。

エラー:
    MsgBox Err.Description
にジャンプしてきたら、

このようなメッセージボックスが表示することができます。

    Range("a1", Range("a1").End(xlDown).End(xlToRight)).SpecialCells(xlCellTypeBlanks).Select
これは、前回紹介した範囲選択のアレンジで、A1: Range("a1").End(xlDown).End(xlToRight)。A1から最終行の一番右端を範囲選択という意味です。
なお、Bloggerの表示上、Range("a1",で切れていますが、これで一行です。

SpecialCells(xlCellTypeBlanks).Select
これは、xlCellTypeBlanks=空白セルという意味なので、
それをセレクトしてということです。

これだけで、表の中の空白セルを選択することができます。

【数式のセルだけ残して削除する】

このxlCellTypeBlanks以外にも数式のセルなどTypeで指定することができます。
そこで、次の表があります。

B7:C9とE7:E9にはVLOOKUP関数などの数式が設定されています。

今回は3件程度ですので、
数式が設定されているセル以外を削除するという作業は大変ではありませんが、
データ量が増えると範囲選択して削除するだけでも面倒です。

そこで、
数式が設定されているセル以外のデータを削除するという
VBAを作ってみましょう。

Sub 数式残し削除()
    On Error GoTo エラー
    Range("a7:e9").SpecialCells(xlCellTypeConstants, xlNumbers + xlTextValues).ClearContents
    Exit Sub
エラー:
    MsgBox Err.Description
End Sub

今回も、該当セルがないといけないので、エラー時の設定を作っておきましょう。

そして、xlCellTypeBlanksは空白でしたが、
xlCellTypeConstantsは、定数のセル。

つまり数式が設定されているセル以外ですね。

あと、xlCellTypeConstantsには、xlErrors=エラー値。
xlLogical=論理値。
xlNumbers=数値。
xlTextValues=文字
という設定をすることが出来ますので、

今回は、文字や数値を選択したいので、
xlNumbers + xlTextValues
を設定しております。

それを削除したいので、
ClearContents
を使えば、削除することができます。
実際に実行してみると、

このように、数式は削除されませんでした。

たった数行ですが、
これだけでも十分VBAを使って作業効率を改善することが出来ます。

ただ、VBAも大事ですが、
ご覧のように、
#VALUE!のエラーが表示してしまう数式を直せるスキルも大事ですね。