PR

【VBA】データ型を操作して変換を行う

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
もう3月も下旬になりますが雪が降ってみたり寒暖差が激しくて過ごしにくいですね。。。ですが、気を取り直して書いていこうと思います。

VBAを扱う中で多様なデータを扱う訳ですが、必要な型に変換したり調べたりすることが多々発生しますので、今回はそのデータ型(長整数型、日付型、バイト型、ブール型、単精度浮動小数点数型、倍精度浮動小数点数型、通貨型、文字列型、バリアント型、10進数変換)を操作する関数の主なものを書いていきたいと思います。

スポンサーリンク

1.長整数型に変換(CLng関数)

CLng(Expression)

指定されたデータを長整数型(-2,147,483,648~2,147,483,647の整数)に変換します。
そのデータに小数点が含まれる場合は整数に丸めますが、0.5の場合は一番近い偶数に丸めます。(例:3.5⇒4 、 4.5⇒4)

Sub Sample1()
'データ型⇒長整数型(CLng)
 
  Dim Data_String As String
  Dim Data_Lng As Long
  
  Data_String = "3.5"
  Data_Lng = CLng(Data_String)
  MsgBox "CLng関数変換結果⇒" & Data_Lng
  
End Sub

サンプルでは文字の”3.5”をCLng関数を使って長整数型に変換しています。この場合は一番近い偶数に丸められるので、実行結果は「4」になります。

2.日付型に変換(CDate関数)

CDate(Expression)

指定されたデータを日付型データに変換します。
文字列の指定は「平成○○年○月○日」という形で指定し、曜日や年月だけの場合はエラーとなります。また、数値を指定した場合はシリアル値とみなし、整数部分が日付に変換されます。

Sub Sample2()
'データ型⇒日付型(CDate)

  Dim Data_String As String
  Dim Data_date As Date
  
  Data_String = "平成30年3月8日"
  Data_date = CDate(Data_String)
  MsgBox "CDate関数変換結果⇒" & Data_date
  
End Sub

このサンプルを実行すると、以下のように日付型データに変換されます。

ちなみに本サンプルの場合は Dim Data_date As DateをAs LongにするとMsgBoxでシリアル値が表示されますので、参考までに。

Sub Sample3()
'Sample2の参考:日付シリアル値

  Dim Data_String As String
  Dim Data_date As Long
  
  Data_String = "平成30年3月8日"
  Data_date = CDate(Data_String)
  MsgBox "平成30年3月8日シリアル値⇒" & Data_date
  
End Sub

3.バイト型に変換(CByte関数)

CByte(Expression)

数値や文字列をバイト型に変換します。
小数を含む数値は整数に丸められますが、小数部分が0.5の場合は一番近い偶数に丸められますので、そこはCLng関数と同様ですね。

Sub Sample4()
'データ型⇒バイト型(CByte)

  Dim Data_String As String
  Dim Data_byte As Byte
  
  Data_String = "22.5"
  Data_byte = CByte(Data_String)
  MsgBox "CByte関数変換結果⇒" & Data_byte
  
End Sub

4.ブール型に変換(CBool関数)

CBool(Expression)

数値や文字列をブール型に変換しTrue又はFalseを返します。
数値「0」はFalse、「1」はTrueになり、文字列の場合はTrueやFalse以外の値はエラーになります。

Sub Sample5()
'データ型⇒ブール型(CBool)

  Dim Data_String As String
  Dim Num As Integer
  Dim Data_bool, Data_num As Boolean
  
  Num = 0
  Data_String = "True"
  Data_num = CBool(Num)
  Data_bool = CBool(Data_String)
  MsgBox "CBool関数変換結果⇒" & Data_bool & vbCrLf & _
  "CBool(数値⇒" & Num & ")の結果は" & Data_num
  
End Sub

この通り、文字列”True”はTrueとなり、数値としての「0」はFalseになります。

5.整数型に変換(CInt関数)

CInt(Expression)

数値や文字列を整数型(-32,768~32,767の整数)に変換します。
これも同様に小数を含む数値は整数に丸められますが、小数部分が0.5の場合は一番近い偶数に丸められます。

Sub Sample6()
'データ型⇒整数型(CInt)
 
  Dim Data_String As String
  Dim Data_Int As Integer
  
  Data_String = "8.5"
  Data_Lng = CInt(Data_String)
  MsgBox "CInt関数変換結果⇒" & Data_Lng
  
End Sub

6.単精度浮動小数点数型に変換(CSng関数)

CSng(Expression)

数値や文字列を単精度浮動小数点数型に変換します。

負の値:約-3.4×10(38乗)~-1.4×10(-45乗)
正の値:約1.4×10(-45乗)~1.8×10(38乗)

Sub Sample7()
'データ型⇒単精度浮動小数点数型(CSng)

  Dim Data_sng As Single
  
  Data_sng = CSng(10 / 3)
  MsgBox "CSng関数変換結果⇒" & Data_sng
  
End Sub

7.倍精度浮動小数点数型に変換(CDbl関数)

CDbl(Expression)

数値や文字列を倍精度浮動小数点数型に変換します。

負の値:約-1.8×10(308乗)~-4.0×10(-324乗)
正の値:約4.9×10(-324乗)~1.8×10(308乗)

Sub Sample8()
'データ型⇒倍精度浮動小数点数型(CDbl)

  Dim Data_dbl As Double
  
  Data_dbl = CDbl(10 / 3)
  MsgBox "CDbl関数変換結果⇒" & Data_dbl
  
End Sub

8.通貨型に変換(CCur関数)

CCur(Expression)

数値や文字列を通貨型に変換し、整数部は15桁、小数部分は4桁になります。

Sub Sample9()
'データ型⇒通貨型(CCur)

  Dim Data_cur As Currency
  
  Data_cur = CCur(98765.432111)
  MsgBox "CCur関数変換結果⇒ " & Data_cur
  
End Sub

9.文字列型に変換(CStr関数)

CStr(Expression)

数値や日付リテラル(日付の前後に「#」)を文字列型に変換します。

Sub Sample10()
'データ型⇒文字列型(CStr)

  Dim Data_str1, Data_str2 As String
  
  Data_str1 = CStr(123)
  Data_str2 = CStr(#3/9/2018#)
  MsgBox "CStr関数の変換結果⇒" & Data_str1 & vbCrLf & _
  "CStr(日付リテラル)の結果⇒" & Data_str2
  
End Sub

10.バリアント型に変換(CVar関数)

CVar(Expression)

数値や文字列をバリアント(万能)型の値に変換しますので、数値と文字の連結などに使用出来ます。

Sub Sample11()
'データ型⇒バリアント型(CVar)

  Dim Data_str As String
  Dim Data_num As Integer
  Dim Data_var As Variant
  
  Data_str = "0000" '文字
  Data_num = 555  '数値
  Data_var = CVar(Data_num & Data_str)
  MsgBox "CVar関数の変換結果⇒" & Data_var
  
End Sub

11.10進数変換(CDec関数)

CDec(Expression)

数値や数値をあらわす文字列を10進型の値に変換します。
このCDec関数はVariant型を返し、Decimal型は存在しないのでご注意ください。

Sub Sample12()
'データ型⇒10進数変換(CDec)

  Dim Data_dec As Variant  'CDec関数の返りはVariant型

  Data_dec = CDec("0123.456")
  MsgBox "CDec関数の変換結果⇒" & Data_dec
  
End Sub

12.まとめ

以上が主に使用されるデータ型変換の関数になりますが、使用頻度が少ないものは使いたい時にあれ?なんだっけ?となりますから、私自身の備忘録的な意味も含めて書いてみました。




万能に使えるバリアント型は便利で使用頻度も高いと思いますが、その分予期せぬ型になっていてエラーになってしまうケースも稀にあるので、用途に応じて型を使い分けるのも良いかと思います。機会があればぜひ参考になさってくださいませ。

以上、データ型を操作して変換を行う方法についてでした!
今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました