【VB.NET】文字列から数字に変換する方法
文字列から数字に変換する方法をサンプルコードを使って説明します。
必要に応じて使い分けます。
Integer.Parse を使う方法
サンプルコード
Module Module1
Sub Main()
' 半角数字
ChangeToNum("12345")
' 全角数字
ChangeToNum("12345")
' 前後スペース
ChangeToNum(" 12345 ")
' 間にスペース
ChangeToNum("12 345")
' 小数点
ChangeToNum("123.45")
' 符号あり
ChangeToNum("-12345")
' 数字以外
ChangeToNum("ABC")
' 最大値
ChangeToNum(Integer.MaxValue.ToString)
' 最大値 + 1
ChangeToNum(Integer.MaxValue + 1.ToString)
' 最小値
ChangeToNum(Integer.MinValue.ToString)
' 最小値 - 1
ChangeToNum(Integer.MinValue - 1.ToString)
' Nothing
ChangeToNum(Nothing)
End Sub
Sub ChangeToNum(ByVal numSt As String)
Console.WriteLine("【{0}】を数字に変換", numSt)
Try
Console.WriteLine(Integer.Parse(numSt))
Catch ex As Exception
Console.WriteLine(ex)
End Try
Console.WriteLine()
End Sub
End Module
【12345】を数字に変換
12345
【12345】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【 12345 】を数字に変換
12345
【12 345】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【123.45】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【-12345】を数字に変換
-12345
【ABC】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【2147483647】を数字に変換
2147483647
【2147483648】を数字に変換
System.OverflowException: Int32 型の値が大きすぎるか、または小さすぎます。
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【-2147483648】を数字に変換
-2147483648
【-2147483649】を数字に変換
System.OverflowException: Int32 型の値が大きすぎるか、または小さすぎます。
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【】を数字に変換
System.ArgumentNullException: 値を Null にすることはできません。
パラメーター名:String
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
続行するには何かキーを押してください . . .
Convert.ToUInt32 を使う方法
サンプルコード
Module Module1
Sub Main()
' 半角数字
ChangeToNum("12345")
' 全角数字
ChangeToNum("12345")
' 前後スペース
ChangeToNum(" 12345 ")
' 間にスペース
ChangeToNum("12 345")
' 小数点
ChangeToNum("123.45")
' 符号あり
ChangeToNum("-12345")
' 数字以外
ChangeToNum("ABC")
' 最大値
ChangeToNum(Integer.MaxValue.ToString)
' 最大値 + 1
ChangeToNum(Integer.MaxValue + 1.ToString)
' 最小値
ChangeToNum(Integer.MinValue.ToString)
' 最小値 - 1
ChangeToNum(Integer.MinValue - 1.ToString)
' Nothing
ChangeToNum(Nothing)
End Sub
Sub ChangeToNum(ByVal numSt As String)
Console.WriteLine("【{0}】を数字に変換", numSt)
Try
Console.WriteLine(Convert.ToUInt32(numSt))
Catch ex As Exception
Console.WriteLine(ex)
End Try
Console.WriteLine()
End Sub
End Module
【12345】を数字に変換
12345
【12345】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseUInt32(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.Convert.ToUInt32(String value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【 12345 】を数字に変換
12345
【12 345】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseUInt32(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.Convert.ToUInt32(String value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【123.45】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseUInt32(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.Convert.ToUInt32(String value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【-12345】を数字に変換
System.OverflowException: UInt32 型の値が大きすぎるか、または小さすぎます。
場所 System.Number.ParseUInt32(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.Convert.ToUInt32(String value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【ABC】を数字に変換
System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseUInt32(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.Convert.ToUInt32(String value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【2147483647】を数字に変換
2147483647
【2147483648】を数字に変換
2147483648
【-2147483648】を数字に変換
System.OverflowException: UInt32 型の値が大きすぎるか、または小さすぎます。
場所 System.Number.ParseUInt32(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.Convert.ToUInt32(String value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【-2147483649】を数字に変換
System.OverflowException: UInt32 型の値が大きすぎるか、または小さすぎます。
場所 System.Number.ParseUInt32(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.Convert.ToUInt32(String value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【】を数字に変換
0
続行するには何かキーを押してください . . .
Integer.ParseメソッドとConvert.ToInt32の違い
簡単に説明すると、Nothing(Null)の扱いが違います。
Convert.ToInt32に Nothing を渡すと0が返って来るのに対し、Integer.Parse にNothing を渡すとArgumentNullException エラーになります。
Module Module1
Sub Main()
Dim numst As String = Nothing
' 数字変換
Console.WriteLine(Convert.ToInt32(numst))
'0
' 数字変換
Console.WriteLine(Integer.Parse(numst))
'ハンドルされていない例外: System.ArgumentNullException: 値を Null にすることはできません。
End Sub
End Module
Nothing(Null)を 0 とみなすなら Convert.ToInt32 で変換するのが良いと思います。
CInt を使う方法
最大の特徴は、小数点を渡してもエラーにならないことです。
ただし、丸め処理されます。
Module Module1
Sub Main()
' 半角数字
ChangeToNum("12345")
' 全角数字
ChangeToNum("12345")
' 前後スペース
ChangeToNum(" 12345 ")
' 間にスペース
ChangeToNum("12 345")
' 小数点
ChangeToNum("123.45")
' 符号あり
ChangeToNum("-12345")
' 数字以外
ChangeToNum("ABC")
' 最大値
ChangeToNum(Integer.MaxValue.ToString)
' 最大値 + 1
ChangeToNum(Integer.MaxValue + 1.ToString)
' 最小値
ChangeToNum(Integer.MinValue.ToString)
' 最小値 - 1
ChangeToNum(Integer.MinValue - 1.ToString)
' Nothing
ChangeToNum(Nothing)
End Sub
Sub ChangeToNum(ByVal numSt As String)
Console.WriteLine("【{0}】を数字に変換", numSt)
Try
Console.WriteLine(CInt(numSt))
Catch ex As Exception
Console.WriteLine(ex)
End Try
Console.WriteLine()
End Sub
End Module
【12345】を数字に変換
12345
【12345】を数字に変換
12345
【 12345 】を数字に変換
12345
【12 345】を数字に変換
System.InvalidCastException: String "12 345" から型 'Integer' への変換は無効です。 ---> System.FormatException: 入力文字列の形式が正しくありません。
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
--- 内部例外スタック トレースの終わり ---
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【123.45】を数字に変換
123
【-12345】を数字に変換
-12345
【ABC】を数字に変換
System.InvalidCastException: String "ABC" から型 'Integer' への変換は無効です。 ---> System.FormatException: 入力文字列の形式が正しくありません。
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
--- 内部例外スタック トレースの終わり ---
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【2147483647】を数字に変換
2147483647
【2147483648】を数字に変換
System.OverflowException: 算術演算の結果オーバーフローが発生しました。
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【-2147483648】を数字に変換
-2147483648
【-2147483649】を数字に変換
System.OverflowException: 算術演算の結果オーバーフローが発生しました。
場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
場所 ConsoleApplication1.Module1.ChangeToNum(String numSt) 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 47
【】を数字に変換
0
続行するには何かキーを押してください . . .
型で扱う以上の数値はエラー
Integr型では、変換出来ない範囲の場合エラーとなります。
サンプルコード
Module Module1
Sub Main()
Dim num As Integer = Integer.MaxValue
’ギリギリセーフ
Console.WriteLine(Integer.Parse(num.ToString))’2147483647
’アウト
Console.WriteLine(Integer.Parse(num + 1.ToString))
End Sub
End Module
2147483647
ハンドルされていない例外: System.OverflowException: Int32 型の値が大きすぎるか、または小さすぎます。
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.Main() 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 7
もう少し大きい型で変換してあげればOK
Integr → Long に変更します。
サンプルコード
Module Module1
Sub Main()
Dim num As Integer = Integer.MaxValue
' 型の扱い範囲内
Console.WriteLine(Integer.Parse(num.ToString)) '2147483647
' 型の扱い範囲外
'Console.WriteLine(Integer.Parse(num + 1.ToString))
' Long.Parse で変換
Console.WriteLine(Long.Parse(num + 1.ToString))
' Convert.ToInt64 で変換
Console.WriteLine(Convert.ToInt64(num + 1.ToString))
End Sub
End Module
2147483647
2147483648
2147483648
続行するには何かキーを押してください . . .
カンマがある文字列の場合
サンプルコード
Module Module1
Sub Main()
Console.WriteLine(Integer.Parse("123,456,789"))
End Sub
End Module
ハンドルされていない例外: System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
場所 ConsoleApplication1.Module1.Main() 場所 C:\workProjects\ConsoleApplication1\ConsoleApplication1\Module1.vb:行 5
エラー回避するサンプルコード
Imports System.Globalization
Module Module1
Sub Main()
Console.WriteLine(Integer.Parse("123,456,789",
NumberStyles.AllowThousands))
End Sub
End Module
123456789
続行するには何かキーを押してください . . .
カンマ区切りがある場合、カンマを除去する処理を入れるのもひとつの手段ですが、
System.Globalization をImports して「NumberStyles列挙体を使用した変換」を使用するのが早いです。
NumberStyles列挙体は読んで字のごとく数字のスタイルの一覧です。
カンマ以外にも通貨や、-符号付きなどの文字列に対応することも出来ます。
Imports System.Globalization
Imports ExcelNumberFormat
Module Module1
Sub Main()
Dim value As Decimal = 12345D
' 通貨表記
Dim mo = value.ToString("C2", New CultureInfo("jp-JP"))
Console.WriteLine(mo)
' 通貨表記を数字に変換
Console.WriteLine(Integer.Parse(mo, NumberStyles.Currency))
End Sub
End Module
¥12,345.00
12345
続行するには何かキーを押してください . . .
NumberStyles列挙体について詳しくは、本家マイクロソフトを参照してください。

Integer.TryParse を使う方法
.NET2.0以降であれば、Integer.TryParseメソッドが使えます。
Integer.TryParseは変換できない場合でもエラーとならず、変換結果に「0」を戻してくれます。
変換できない場合は、0として扱う様なシステムにはInteger.TryParse を使うのが一番楽です。
サンプルコード
Imports System.Globalization
Module Module1
Sub Main()
Dim stnum As String = ""
Dim resflg As Boolean
Dim result As Integer
' 変換可能か確認
stnum = "123456"
resflg = Integer.TryParse(stnum, result)
Console.WriteLine(stnum)
Console.WriteLine(resflg)
Console.WriteLine(result)
Console.WriteLine()
' 変換可能か確認
stnum = "123,456"
result = Integer.TryParse(stnum, result)
Console.WriteLine(stnum)
Console.WriteLine(resflg)
Console.WriteLine(result)
Console.WriteLine()
' カンマを取除けば変換可能か確認
resflg = Integer.TryParse(stnum, NumberStyles.AllowThousands, Nothing, result)
Console.WriteLine(stnum)
Console.WriteLine(resflg)
Console.WriteLine(result)
End Sub
End Module
123456
True
123456
123,456
True
0
123,456
True
123456
続行するには何かキーを押してください . . .
コメント