更新日:、 作成日:
VBA 文字列を変換する
はじめに
Excel VBA マクロの文字列 (String) を大文字小文字や数値に変換する方法を紹介します。
「StrConv 関数」から、大文字小文字、全角半角などに変換できます。
「CInt 関数」や「Val 関数」から、文字列を数値に変換できます。
「CDate 関数」から、文字列を日付に変換できます。
互換性のある値は、そのまま数値型や日付型に代入しても自動で型変換されます。
文字列の大文字と小文字を変換する
「StrConv 関数」を使用して、文字列を「大文字と小文字、全角と半角、ひらがなとカタカナ」などに変換できます。
引数には (文字列, 文字種) を指定します。文字種には次のものがあります。
- vbUpperCase:大文字に変換します。
- vbLowerCase:小文字に変換します。
- vbProperCase:各単語の先頭の文字を大文字に変換します。
- vbWide:半角文字を全角文字に変換します。
- vbNarrow:全角文字を半角文字に変換します。
- vbKatakana:ひらがなをカタカナに変換します。
- vbHiragana:カタカナをひらがなに変換します。
- vbUnicode:システムの既定のコード ページを使って Unicode に変換します。
- vbFromUnicode:Unicode からシステムの既定のコード ページ (Shift_JIS) に変換します。
Or を使って、文字種を組み合わせられます。
Dim s As String
s = StrConv("abc", vbUpperCase) ' 大文字
Debug.Print(s) ' ABC
s = StrConv("abc def", vbProperCase) ' 先頭を大文字
Debug.Print(s) ' Abc Def
s = StrConv("ABC", vbWide) ' 全角
Debug.Print(s) ' ABC
s = StrConv("あいう", vbKatakana) ' カタカナ
Debug.Print(s) ' アイウ
s = StrConv("abc", vbUpperCase Or vbWide) ' 大文字と全角
Debug.Print(s) ' ABC
Shift_JIS に変換
「LenB 関数」から、文字のバイト数を取得できます。
VBA の文字コードは Unicode (UTF-16) です。1 文字 2 バイトで ABC は 6 バイトになります。
半角文字を 1 バイトとするには vbFromUnicode を指定して、Shift_JIS に変換する必要があります。
Dim i As Integer
i = LenB(StrConv("ABC", vbFromUnicode))
Debug.Print(i) ' 3
i = LenB(StrConv("ABC", vbFromUnicode))
Debug.Print(i) ' 6
i = LenB(StrConv("アイウ", vbFromUnicode))
Debug.Print(i) ' 3
i = LenB(StrConv("アイウ", vbFromUnicode))
Debug.Print(i) ' 6
スポンサーリンク
文字列を数値に変換する
文字列の数字を数値型に代入すると、その型に変換できます。変換できない文字列が含まれていると「エラー 13 型が一致しません。」が発生します。
Dim i As Integer
i = "123"
Debug.Print(i) ' 123
i = "1.5"
Debug.Print(i) ' 2、整数型なら偶数丸めされる
i = "32768" ' エラー、オーバーフロー
Debug.Print(i)
i = "123あいう" ' エラー、型が一致しません
Debug.Print(i)
Dim d As Double
d = "1.5"
Debug.Print(i) ' 1.5
CInt 関数
「CInt 関数」などを使用して、指定した数値型 (Integer など) に変換できます。
- CByte:Byte 型
- CInt:Integer 型
- CLng:Long 型
- CSng:Single 型
- CDbl:Double 型
- CCur:Currency 型
- CDec:Decimal 型
変換できないときは「エラー 13 型が一致しません。」が発生します。
Dim i As Integer
i = CInt("123")
Debug.Print(i) ' 123、Integer
i = CInt("1,234")
Debug.Print(i) ' 1234
i = CInt("1 2 3")
Debug.Print(i) ' エラー、型が一致しません
i = CInt("123あいう")
Debug.Print(i) ' エラー、型が一致しません
Dim l As Long
l = CLng("123")
Debug.Print(l) ' 123、Long
"1,234" のようにカンマ区切りの数字も変換できます。
空白や数字以外の文字列が含まれるときはエラーになります。
「IsNumeric 関数」を使用して、変換できるか判定できます。数値に変換できるときは True を返します。
Dim s As String
s = "123あいう"
Dim i As Integer
If IsNumeric(s) = True Then ' 変換できるときだけ数値にする
i = CInt(s)
Else
i = 0
End If
Debug.Print(i)
Decimal 型に変換するには「CDec 関数」を使用します。それ以外の方法で Decimal 型は使用できません。
Dim d As Variant
d = CDec("79,228,162,514,264,337,593,543,950,335")
Debug.Print(d) ' 79228162514264337593543950335、Decimal
Val 関数
「Val 関数」を使用して、文字列を数値に変換できます。基本的に Double 型に変換されます。
数値に変換できないときは 0 になります。文字列の先頭が数字ならその数値に変換します。
Dim d As Double
d = Val("123")
Debug.Print(d) ' 123
d = Val("あいう123")
Debug.Print(d) ' 0
d = Val("123あいう")
Debug.Print(d) ' 123
d = Val("1,234")
Debug.Print(d) ' 1
d = Val("1 2 3")
Debug.Print(d) ' 123
エラーを発生させることなく、数値に変換できます。
空白を削除してから変換されます。
"1,234" のようにカンマ区切りの数字はカンマの前までを変換します。「CInt 関数」なら数値に変換できます。
まとめ
とにかく数値にしたいときや、数字以外の文字列が含まれる可能性があるときは「Val 関数」を使用します。
確実に数字のみのときは「CInt 関数」や直接数値型に代入します。
文字列が含まれているときに変換したくないときは「IsNumeric 関数」を使用して判定します。
文字列を日付に変換する
日付や時刻形式の文字列を日付型 (Date) に代入すると、日付に変換できます。変換できない文字列が含まれていると「エラー 13 型が一致しません。」が発生します。
Dim d As Date
d = "2013/1/31"
Debug.Print(d) ' 2013/01/31
d = "2013年1月31日"
Debug.Print(d) ' 2013/01/31
d = "1:2:3"
Debug.Print(d) ' 1:02:03
d = "2013/1/2 3:4:5"
Debug.Print(d) ' 2013/01/02 3:04:05
d = "一月三十一日"
Debug.Print(d) ' エラー、型が一致しません
CDate 関数
「CDate 関数」を使用して、日付型 (Date) に変換できます。
変換できないときは「エラー 13 型が一致しません。」が発生します。
Dim d As Date
d = CDate("2013/1/2 3:4:5")
Debug.Print(d) ' 2013/01/02 3:04:05
d = CDate("一月三十一日")
Debug.Print(d) ' エラー、型が一致しません
「IsDate 関数」を使用して、変換できるか判定できます。日付に変換できるときは True を返します。
Dim s As String
s = "一月三十一日"
Dim d As Date
If IsDate(s) = True Then ' 変換できるときだけ日付にする
d = CDate(s)
Else
d = 0 ' 日付の初期値
End If
Debug.Print(d)
文字列から "24:00:00" のような、24 時間を超えるときは、変換できません。
24 時間以上を時刻を入力するには「TimeSerial 関数」を使用します。
スポンサーリンク