サイトについて      連絡先   検索

VBA 文字列を変換する

はじめに

Excel VBA マクロの文字列 (String) を変換する方法を紹介します。

大文字と小文字、全角と半角などに変換をするには「StrConv 関数」を使用します。

数値に変換をするには「Val 関数」や「CInt 関数」を使用します。

日付に変換をするには「CDate 関数」を使用します。

  • 目次
    • 大文字と小文字を変換する
    • 数値に変換する
    • 日付に変換する

大文字と小文字を変換する

文字列を「大文字と小文字」、「全角と半角」、「ひらがなとカタカナ」などに変換するには「StrConv 関数」を使用します。

引数には(文字列, 文字種)を渡します。文字種には次のものがあります。


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 

Orを使って文字種を組み合わせられます。

数値に変換する

特別な操作をしなくても、数値型に数字を代入すると自動的に変換されます。だたし文字列が含まれているとエラーになります。


Dim i As Integer

i = "123"
Debug.Print(i) ' 123

i = "あいう123" ' エラー
Debug.Print(i) 

i = "123あいう" ' エラー
Debug.Print(i) 

明示的に文字列を数値に変換するには「Val 関数」を使用します。

数値に変換できないときは 0 を返します。先頭の文字が数字ならそれを変換します。


Dim i As Integer

i = Val("123")
Debug.Print(i) ' 123

i = Val("あいう123")
Debug.Print(i) ' 0

i = Val("123あいう")
Debug.Print(i) ' 123

指定した数値型 (Integer など) へ変換するには「CInt 関数」などを使用します。


Dim i As Integer

i = CInt("123")
Debug.Print(i) ' 123、Integer

Dim l As Long
l = CLng("123")
Debug.Print(l) ' 123、Long

i = CInt("123あいう") ' エラー

この方法では、変換できない値はエラーになります。「IsNumeric 関数」で変換できるか判定できます。

IsNumeric 関数」の戻り値が True のときは数値に変換できます。


Dim s As String
s = "123あいう"

Dim i As Integer

If IsNumeric(s) = True Then
    ' 変換できるときだけ数値にする
    i = CInt(s)
    Debug.Print(i)
End If

使い分けとして、とにかく数値にしたいときは「Val 関数」を使用し、文字列が含まれているときに変換したくないときは「CInt 関数」を使用します。

日付に変換する

特別な操作をしなくても、日付型に日付や時刻の形式の文字列を代入すると自動的に変換されます。


Dim d As Date

d = "2013/1/31"
Debug.Print(d) ' 2013/01/31

d = "1:2:3"
Debug.Print(d) ' 1:02:03

d = "2013/1/31 1:2:3"
Debug.Print(d) ' 2013/01/31 1:02:03 

d = "2013年1月31日"
Debug.Print(d) ' 2013/01/31

d = "一月三十一日" ' エラー

明示的に日付型へ変換するには「CDate 関数」を使用します。


Dim d As Date

d = CDate("2013/1/31")
Debug.Print(d) ' 2013/01/31

d = CDate("一月三十一日") ' エラー

変換できない値はエラーになります。「IsDate 関数」で変換できるか判定できます。

IsDate 関数」の戻り値が True のときは日付に変換できます。


Dim s As String
s = "一月三十一日"

Dim d As Date

If IsDate(s) = True Then
    ' 変換できるときだけ日付にする
    d = CDate(s)
    Debug.Print(d)
End If
  • 目次
    • 大文字と小文字を変換する
    • 数値に変換する
    • 日付に変換する