【VBA道場】#21 データの型を判定する
問題
A1~A5のデータ型をB1~B5に表示せよ。
完成見本
解答
Sub vba_doujyou_21()
'繰り返しで使用する変数iを定義
Dim i As Long
'1から5まで繰り返す
For i = 1 To 5
'B列にA列のデータ型を入力する
Cells(i, 2) = TypeName(Cells(i, 1).Value)
Next i
End Sub
サンプルファイル(マクロ無)
マクロなしのファイルはこちらからご利用いただけます。
VBA道場21 サンプルファイル(マクロ無)
1 ファイル 8.16 KB
サンプルファイル(マクロ有)
今回のマクロはこちらからダウンロードしてご使用いただけます。
VBA道場21 サンプルファイル(マクロ有)
1 ファイル 13.14 KB
解説
TypeName(調べたい対象):対象のデータ形式を調べる
前回まで、「セルが数値かどうか」「セルが日付かどうか」について調べていきました。
セルが数値かどうかを判断するときには「IsNumeric」、日付かどうかを判断するときには「IsDate」を使いましたね。
では文字列を判定したい時はどうすればいいでしょうか?
「IsString」でしょうか?
残念ながらVBAに「IsString」という関数はありません。
そこで出てくるのが「TypeName」関数です。
「TypeName」関数は、どんな値でも格納できるバリアント型変数に現在格納されているデータの形式を調べる関数です。
この「TypeName」関数にセルの値を渡すと、その形式を判別することが可能です。
ではコードを見ていきましょう。
今回は、下記のコードでB列にA列のデータ型を入力させました。
Cells(i, 2) = TypeName(Cells(i, 1).Value)
今回は5行あるので、5回繰り返します。
'1から5まで繰り返す
For i = 1 To 5
'B列にA列のデータ型を入力する
Cells(i, 2) = TypeName(Cells(i, 1).Value)
Next i
では次に実行結果を見ていきましょう。
1行目は文字列なので「String」が表示されていますね。
同様に、数字は「Double」、日付は「Date」、True/Falseには「Boolean」、時刻も「Double」と表示されています。
型一覧は以下の通りとなっています。
型名 | 型指定文字 | 格納できるデータ |
ブール型 | Boolean | TrueまたはFalse |
バイト型 | Byte | 0~255までの整数 |
整数型 | Integer | -32,768~32,767の整数 |
長整数型 | Long | -2,147,483,648~2,147,483,647の整数 |
通貨型 | Currency | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807の固定小数点数 |
単精度浮動小数点数型 | Single | 負の値:約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗) |
倍精度浮動小数点数型 | Double | 負の値:約-1.8×10(308乗)~-4.0×10(-324乗)正の値:約4.9×10(-324乗)~1.8×10(308乗) |
日付型 | Date | 日付:西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59 |
文字列型 | String | 任意の長さの文字列 |
オブジェクト型 | Object | オブジェクト |
バリアント型 | Variant | すべてのデータ |
時刻は「Double」型であることに注意しましょう。
おわりに
今日はデータの型を判定しました。
型名の判定をできるようになると入力チェックなどができるようになります。
是非活用しましょう!
今日はここまで。
おすすめ参考書
Amazon
たった1秒で仕事が片付くExcel自動化の教科書
いちばんやさしいExcelVBAの教本
ExcelVBA逆引き辞典 パーフェクト
楽天
いちばんやさしいExcelVBA
|
すらすら読めるExcelVBA
|
VBA逆引き大辞典
|