VBA37_データ型変換が可能か判定する方法

おはようございます。にわか管理人のBenです。前回はデータ型の変換関数を紹介しましたが、変換できないときはエラーが出てプログラムが止まってしまいます。それを防ぐためにも変換前にチェックする方法をノートします。

20160330a.png
ご覧の関数はIsで始まりますが、その意味合いは「(データ型)ですか?」という感じでです。はじめのIsDateはDateですか? つまり日付として認識できるかどうかの意味を持った関数です。IsDateは()内の引数が日付として認識できたらTrue、そうでないときはFalseを返す関数です。これを使ってIf文などであらかじ振り分けると、CDateで日付型に変換するときに変換できません!エラーを起こすことがなくなります。

次のIsNumericは数値として認識できるかを判定する関数です。整数と小数への変換はいずれも数値として認識できれば、四捨五入による丸め処理があってもエラーが出ることはないです。バリアント型で何も代入されていないときはEmptyですが、それを判定するのがIsEmptyです。同じようにNullかどうか判定するのがIsNull。最後はバリアント型で配列が代入されているかどうかを判定するIsArrayです。

Isnumeric("a") 'Falseです
IsDate("1/1") 'trueです。今年の1月1日と認識されます
IsEmpty(Empty) '当然True。セルの空白判定にも便利です
If IsNumeric(S) = True then i=CInt(S) Else i=0
 'もしSが数値変換できたらiには変換したそれを代入、
 'そうでないならi=0 =Trueは省略可。
(1行目)アルファベットや記号しかないのは数値変換は困難です。(2行目)日付は年がないときは今年になります。時刻がないときは00:00:00になります。VBAでは日付の区切り文字や桁数が2016/01/26でも2012-1-26でも、可能な限り日付型に変換しようとできるだけ頑張ってくれます。IsDateがFalseになるのは頑張っても無理なときです。(3行目)Emptyは変数以外にもセルの初期状態もそうなので、セルの状態を確認するのにも便利です。(4行目)If文によるエラー回避の例です。ご参考になれば幸いです

この記事へのコメント


この記事へのトラックバック