AccessのクエリやVBA、SQLでよく使うデータ型変換関数をまとめました。
◇よく使うデータ型変換とは?
Googleで頻繁に検索されているものを主に紹介。
・文字列⇔数値
・文字列⇔日付型
・メモ型→文字列(テキスト型)
・数値→通貨型
その中でもあまり使わないものの説明は省略しています。
※許容範囲の大きい型から小さい型への変換は注意してください!
エラーなく桁落ちするのでバグと認識しにくいです。
よく使うデータ型変換と使用例
文字列⇔数値
・文字列→数値(整数型)
CInt([項目名])
変換例
変換前 | 変換後 |
---|---|
-1,234 | -1234 |
-1234.5 | -1234 |
1,000.001 | 1000 |
0 | 0 |
(Null) | #エラー |
-1.001 | -1 |
1234.5 | 1234 |
¥1,234 | 1234 |
・文字列→数値(長整数型)
CLng([項目名])
変換例
変換前 | 変換後 |
---|---|
-1,234 | -1234 |
-1234.5 | -1234 |
1,000.001 | 1000 |
0 | 0 |
(Null) | #エラー |
-1.001 | -1 |
1234.5 | 1234 |
¥1,234 | 1234 |
・文字列→数値(倍精度浮動小数点型)
CDbl([項目名])
変換例
変換前 | 変換後 |
---|---|
-1,234 | -1234 |
-1234.5 | -1234.5 |
1,000.001 | 1000.001 |
0 | 0 |
(Null) | #エラー |
-1.001 | -1.001 |
1234.5 | 1234.5 |
¥1,234 | 1234 |
参考:文字列→数値においてValやCSng、CDecを使わない理由
・Val
文字列から数値への変換といえば、Val関数もありますが、
文字列に「,」や「¥」、全角文字が含まれると対応できない(値が0になる)ため、あまりおすすめできません。
汎用性を考えるとCDbl([項目名])がおすすめです。
・CSng
単精度浮動小数点型は演算誤差が発生しやすくおすすめできません。
そもそもややこしい分野なのであまり理解せず使用するには危険かと思います。
・CDec
Access クエリではサポートされていません。
・数値→文字列
CStr([項目名])
変換例
数値(整数型) | 数値(長整数型) | 数値(単精度浮動小数点型) | 数値(倍精度浮動小数点型) |
---|---|---|---|
1000 | 1000 | 1000.001 | 1000.001 |
1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 |
-1 | -1 | -1 | -1 |
-1000 | -1000 | -1000.001 | -1000.001 |
↓ 文字列変換
文字列 | 文字列 | 文字列 | 文字列 |
---|---|---|---|
1000 | 1000 | 1000.001 | 1000.001 |
1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 |
-1 | -1 | -1 | -1 |
-1000 | -1000 | -1000.001 | -1000.001 |
・変換値にNullが含まれる場合
変換元の項目に値が何もない(Null)場合がありますが、
変換関数で出力される値は殆どの場合「#エラー」となってしまいます。
そのため、Nullが想定される場合はNullを指定の値に置換するNz関数を利用します。
Nz([項目名], 置換値)
例)CDbl(Nz([項目名],0))、CStr(Nz([項目名],0))
変換前にNullが0に置換されるので、エラーとなりません。
文字列⇔日付型
・文字列→日付型
基本、日付型への変換はCDateを使用しますが、
文字列がどのような形式かでやり方が異なります。
・「YYYY/MM/DD」「YYYY年MM月DD日」「gg年MM月DD日」形式の場合
CDate([項目名])
変換例
「#エラー」となっている箇所については、次項から説明します。
変換前 | 変換後 |
---|---|
20210501 | #エラー |
2021/05/02 | 2021/05/02 |
2021年5月3日 | 2021/05/03 |
令和3年5月4日 | 2021/05/04 |
2021.05.05 | #エラー |
(Null) | #エラー |
・「YYYYMMDD」形式の場合
CDate(Format([項目名],"@@@@\/@@\/@@"))
または、
DateSerial(Mid([項目名],1,4),Mid([項目名],5,2),Mid([項目名],7,2))
どちらの関数を使っても結果は特に変わらないため好みだと思いますが、
個人的には見やすく、ミスも少なそうなのでFormatを使用するのがおすすめです。
変換例
変換前 | 変換後 |
---|---|
20210501 | 2021/05/01 |
・「YYYY.MM.DD」形式の場合
CDate(Replace([項目名],".","/"))
変換例
変換前 | 変換後 |
---|---|
2021.05.05 | 2021/05/05 |
・文字列がNullの場合
IIf(IsNull([項目名]),Null,CDate([項目名]))
NullであればNullを返すので、エラーとなりません。
・日付型→文字列型
CStr([項目名])
変換例
変換前 | 変換後 |
---|---|
2021/01/03 | 2021/01/03 |
メモ型→文字列(テキスト型)
変換関数はありません。
変換不要で、
・メモ型→文字列
に値の代入(更新)ができます。
数値→通貨型
CCur([項目名])
変換例
変換前 | 変換後 |
---|---|
-1000.001 | -¥1,000.001 (見た目上は-¥1,000) |
-1 | -¥1 |
0 | ¥0 |
1 | ¥1 |
1000.001 | ¥1,000.001 (見た目上は¥1,000) |
参考:データ型変換関数一覧(Microsoft公式サイトより)
データ変換関数は主に以下のような「C」から始まるものがあります。
これらの他にも変換関数はありますが、これだけ知っていたら十分かと思われます。
関数 | 戻り値の型 | 引数 expression の範囲 |
---|---|---|
CBool | ブール値型 | 任意の有効な文字列式または数式を指定します。 |
CByte | バイト型 | 0 から 255。 |
CCur | 通貨型 | -922,337,203,685,477.5808 から 922,337,203,685,477.5807。 |
CDate | 日付型 | 任意の有効な日付式を指定します。 |
CDbl | 倍精度浮動小数点型 | -1.79769313486231E308 から -4.94065645841247E-324 (負の値)。 4.94065645841247E-324 から 1.79769313486232E308 (正の値)。 |
CDec | 小数点型 |
小数点以下の桁数が 0 の場合 (小数部分を持たない場合)、 |
CInt | 整数型 | -32,768 から 32,767。小数点以下は丸められます。 |
CLng | 長整数型 | -2,147,483,648 から 2,147,483,647。 小数点以下は丸められます。 |
CSng | 単精度浮動小数点型 | -3.402823E38 から -1.401298E-45 (負の値)。 1.401298E-45 から 3.402823E38 (正の値)。 |
CStr | 文字列 | CStr の戻り値は expression 引数に依存します。 |
CVar | バリアント型 | 数値の場合は倍精度浮動小数点型の範囲と同です。 数値以外の場合は文字列型の範囲と同じです。 |