Categories: VBA

VBAでセルのデータを判定する│数値・日付・文字列の判定方法を説明

この記事では、セルが指定されたデータ型(数値・日付・文字列など)になっているかどうかを、VBAを使って判定する方法を実際のVBAコードも含めて説明します。

Excelでも文字列と数値の四則演算はできないように、プログラミングの世界では、データの「型」という概念が、極めて重要な意味を持っています。

VBAを使ったExcel業務の自動化でも、一部、セルのデータ型を判定することが求められる場合がありますので、しっかりと学習しておきましょう。

セルのデータを判定する(数値)

この章では、ExcelのセルA1のデータが数値型かどうかを判定するVBAコードを紹介します。判定結果は変数「c」に格納し、最後にメッセージボックスで表示する処理も加えています。

基本構文

IsNumeric(Expression)

  • IsNumeric= データが数値かを判定する関数
    数値の場合Trueを返し、数値以外の場合Falseを返します
  • (Expression) = 判定対象のセル
    この例では、A1です

判定結果の補足

IsNumeric関数では、数値の場合True、数値以外の場合はFalseを返します。(Boolean式といいます)

特殊な判定結果として、日付型はFalseを返しますが、時刻型ではTrueを返します。また、数式の場合には、数式の計算結果が数値の場合にのみTrueを返します。

Rangeプロパティ

Sub Sample()

Dim c As String
c = IsNumeric(Range(“A1”))


MsgBox c


End Sub

Cellsプロパティ

Sub Sample()

Dim c As String
c = IsNumeric(Cells( 1 , 1 ))


MsgBox c


End Sub

セルのデータを判定する(日付)

この章では、ExcelのセルA1のデータが日付型かどうかを判定するVBAコードを紹介します。判定結果は変数「c」に格納し、最後にメッセージボックスで表示する処理も加えています。

基本構文

IsDate(Expression)

  • IsDate= データが数値かを判定する関数
    日付の場合Trueを返し、日付以外の場合Falseを返します
  • (Expression) = 判定対象のセル
    この例では、A1です

判定結果の補足

IsDate関数では、日付の場合True、日付以外の場合はFalseを返します。(Boolean式といいます)

なお、数式の場合には、数式の計算結果が日付の場合にのみTrueを返します。

Rangeプロパティ

Sub Sample()

Dim c As String
c = IsDate(Range(“A1”))


MsgBox c


End Sub

Cellsプロパティ

Sub Sample()

Dim c As String
c = IsDate(Cells( 1 , 1 ))


MsgBox c


End Sub

セルのデータを判定する(文字列)

この章では、ExcelのセルA1のデータが文字列かどうかを判定するVBAコードを紹介します。なお、前章までとは異なり、VBAでは文字列かどうかを判定する専用の関数はありません。

ここでは、汎用性のあるTypeName関数を使って、文字列かどうかを判定するVBAコードを紹介します。

判定結果は変数「c」に格納し、最後にメッセージボックスで表示する処理も加えています。

基本構文

TypeName(VarName)

  • TypeName= データの形式を判定する関数
    どんな値でも格納できます
  • (VarName) = バリアント型変数
    この例では、Valueです

判定結果の補足

TypeName関数で返す判定結果は下記の通りです。

文字列String
数値Double
日付Date
時刻Double
数式Double
(結果がエラーの)数式Error

上表のように、TypeName関数はセルが文字列の場合にStringを返しますので、判定結果Stringがどうかで文字列かの判定をすることが可能です。

Rangeプロパティ

Sub Sample()

Dim c As String
c = TypeName(Range(“A1”).Value)


MsgBox c


End Sub

Cellsプロパティ

Sub Sample()

Dim c As String
c = IsData(Cells( 1 , 1 ).Value)


MsgBox c


End Sub

Webs

元事務処理担当者として、プログラミングを活用した業務改善を推進している。プログラマ出身ではない事務職の現場目線で情報を発信。 その他、webs-studio.jpをメインに、複数のブログサイトを立ち上げており、合計で月間10万PVのメディア運営を行っている。 姉妹サイト一覧