前回までは文字列のバイト数の取得や
パスワードの必要基準を満たしているかの確認を御紹介いたしました。
今回は数値に関する機能として、入力された値が数値として認識でき、
指定の範囲に当てはまるかの確認を御紹介いたします。
業務システムで使用するパターンとしては売上管理の数量や金額、
距離・長さ・重量などの数値を入力する際のチェックに利用できるかと思います。
ではサンプルを用いて御紹介します。
まず入力された文字列が数値として認識できるかどうかを確認するには
「IsNumeric」メソッドで確認できます。
数値に変換できれば「True」、できなければ「False」が返されます。
パスワードの必要基準を満たしているかの確認を御紹介いたしました。
今回は数値に関する機能として、入力された値が数値として認識でき、
指定の範囲に当てはまるかの確認を御紹介いたします。
業務システムで使用するパターンとしては売上管理の数量や金額、
距離・長さ・重量などの数値を入力する際のチェックに利用できるかと思います。
ではサンプルを用いて御紹介します。
まず入力された文字列が数値として認識できるかどうかを確認するには
「IsNumeric」メソッドで確認できます。
数値に変換できれば「True」、できなければ「False」が返されます。
IsNumeric("123") '←True
IsNumeric("12,345") '←True
IsNumeric("\12,345") '←False
IsNumeric("$12,345") '←False
IsNumeric("12,345.670") '←True
IsNumeric("123") '←False
IsNumeric("あいう") '←False
IsNumeric("") '←False
あとはシステムの仕様にそって、
距離はプラスの値のみでマイナスは不可、金額はマイナスも可能等、
システムの仕様に合わせ指定の範囲内の数値かどうかを確認すれば
入力された数値が指定範囲内かの確認が可能です。
加えて数値の場合は小数の入力を可能とするか、
可能とするなら小数点以下何桁まで可能とするかという確認事項も出てまいります。
VB.NETには小数点以下の桁数を直接確認できるメソッドは用意されておりませんので
少し工夫が必要です。
順序としては
①Format関数で数値を整形する。
②Split関数で小数点で区切る
③区切った文字列の配列の2要素目の文字数が小数点以下の桁数
この3段階で確認することが可能です。
ではサンプルで確認してみます。
①Format関数で数値を整形する。
Format(CDbl("1,000"), "#.######") '←「1000」
Format(CDbl("1,000.00"), "#.######") '←「1000」
Format(CDbl("1,000.0500"), "#.######") '←「1000.05」
Format(CDbl("1,000.1234"), "#.######") '←「1000.1234」
この小数点以下の桁数 #の数は入力箇所の文字数などに合わせて
調整していただければと思います。
またToStringメソッドでも代用可能かと思います。
②Split関数で小数点で区切る
Dim strSplit() As String
strSplit= Split("1000", ".") '←strSplit(0)は「1000」
strSplit= Split("1000.05", ".") '←strSplit(0)は「1000」、strSplit(1)は「05」
strSplit= Split("1000.1234", ".") '←strSplit(0)は「1000」、strSplit(1)は「1234」
③区切った文字数を確認
小数点で区切った文字列の配列strSplitの要素数を確認し、
strSplit.Length = 1 なら小数点以下の桁なし = 整数となります。
strSplit.Length = 2 なら小数点以下の桁がありますので
strSplitの2要素目「strSplit(1)」の文字数を確認します。
"1000.05"の場合strSplit(1)が「05」なので
"1000.05"の場合strSplit(1)が「05」なので
文字数 LEN(strSplit(1))は「2」となり小数点以下2桁の小数、
"1000.1234"の場合strSplit(1)が「1234」なので
文字数 LEN(strSplit(1))は「4」となり小数点以下4桁の小数となります。
これで指定の小数点以下の桁数を超える場合は、
エラーメッセージを出したり、端数を丸める処理を行うことが可能です。
ではこれを関数にまとめてみましょう。
Private Function fncCheckNum(pstrText As String, _
pdblMin As Double, _
"1000.1234"の場合strSplit(1)が「1234」なので
文字数 LEN(strSplit(1))は「4」となり小数点以下4桁の小数となります。
これで指定の小数点以下の桁数を超える場合は、
エラーメッセージを出したり、端数を丸める処理を行うことが可能です。
ではこれを関数にまとめてみましょう。
Private Function fncCheckNum(pstrText As String, _
pdblMin As Double, _
pdblMax As Double, _
pintDigitsLimit As Integer) As Integer
Dim dblCheck As Double '文字列を数値に変換した値
Dim strTemp As String 'フォーマット整形した数値
Dim strSplit() As String '小数点で区切った文字列
Dim intDigits As Integer '小数点以下の桁数
'①数値かどうか確認
If IsNumeric(pstrText) = False Then
MsgBox("数値と認識できません。", vbOKOnly, "形式エラー")
Return 1
End If
'②範囲を確認
dblCheck = CDbl(pstrText)
If dblCheck < pdblMin Then
MsgBox("値が小さすぎます。", vbOKOnly, "範囲エラー")
Return 2
End If
If dblCheck > pdblMax Then
MsgBox("値が大きすぎます。", vbOKOnly, "範囲エラー")
Return 3
End If
'③数値を整形し、小数点で分割
strTemp = Format(dblCheck , "#.#######")
strSplit= Split(strTemp , ".")
'④小数点以下の桁数を取得・確認
Select Case strSplit.Length
Case 1
'整数の場合
intDigits = 0
Case 2
'小数点以下が存在する場合
intDigits = LEN(strSplit(1))
Case Else
MsgBox("数値と認識できません。", vbOKOnly, "形式エラー")
Return 1
End Select
If intDigits > pintDigitsLimit Then
MsgBox("小数点の桁数がオーバーしています。", vbOKOnly, "桁数エラー")
Return 4
End If
Return -1
End Function
引数 pstrText - 確認したい文字列
引数 pdblMin - 指定範囲最小値
引数 pdblMax - 指定範囲最大値
引数 pintDigitsLimit - 小数点以下桁数最大値
戻り値
確認したい文字列が数値として認識できない場合 0
指定範囲の最小値より数値が小さい場合 2
指定範囲の最大値より数値が大きい場合 3
小数点以下の桁数が指定より多い場合 4
指定範囲内の場合 -1
保存ボタンを押された場合など確認が必要なタイミングで入力された文字列と
数値の範囲、小数点以下の桁数などを指定し関数を呼び出すと
範囲内かどうか確認することができます。
この戻り値を元にメッセージなどを表示したり、
端数の丸め処理を行うことができるかと思います。
前回と同様に同じ処理をクラス化してみましょう。
Public Class CheckNum
End Function
引数 pstrText - 確認したい文字列
引数 pdblMin - 指定範囲最小値
引数 pdblMax - 指定範囲最大値
引数 pintDigitsLimit - 小数点以下桁数最大値
戻り値
確認したい文字列が数値として認識できない場合 0
指定範囲の最小値より数値が小さい場合 2
指定範囲の最大値より数値が大きい場合 3
小数点以下の桁数が指定より多い場合 4
指定範囲内の場合 -1
保存ボタンを押された場合など確認が必要なタイミングで入力された文字列と
数値の範囲、小数点以下の桁数などを指定し関数を呼び出すと
範囲内かどうか確認することができます。
この戻り値を元にメッセージなどを表示したり、
端数の丸め処理を行うことができるかと思います。
前回と同様に同じ処理をクラス化してみましょう。
Public Class CheckNum
'プロパティの作成
Public Property pstrText As String ’確認したい文字
Public Property pdblMin As Double '指定範囲最小値
Public Property pdblMax As Double '指定範囲最大値
Public Property pintDigitsLimit As Integer '小数点以下桁数最大値
'メソッドの作成
'①数値かどうか確認
If IsNumeric(pstrText) = False Then
MsgBox("数値と認識できません。", vbOKOnly, "形式エラー")
Return 1
End If
関数での処理の違いは引数の代わりにプロパティに確認する文字列や
数値の範囲を指定したり、
Public Property pstrText As String ’確認したい文字
Public Property pdblMin As Double '指定範囲最小値
Public Property pdblMax As Double '指定範囲最大値
Public Property pintDigitsLimit As Integer '小数点以下桁数最大値
'メソッドの作成
Private Function fncCheckNum() As Integer
Dim dblCheck As Double '文字列を数値に変換した値
Dim strTemp As String 'フォーマット整形した数値
Dim strSplit() As String '小数点で区切った文字列
Dim intDigits As Integer '小数点以下の桁数
Dim strTemp As String 'フォーマット整形した数値
Dim strSplit() As String '小数点で区切った文字列
Dim intDigits As Integer '小数点以下の桁数
If IsNumeric(pstrText) = False Then
MsgBox("数値と認識できません。", vbOKOnly, "形式エラー")
Return 1
End If
'②範囲を確認
dblCheck = CDbl(pstrText)
If dblCheck < pdblMin Then
MsgBox("値が小さすぎます。", vbOKOnly, "範囲エラー")
Return 2
End If
If dblCheck > pdblMax Then
MsgBox("値が大きすぎます。", vbOKOnly, "範囲エラー")
Return 3
End If
'③数値を整形し、小数点で分割
strTemp = Format(dblCheck , "#.#######")
strSplit= Split(strTemp , ".")
'④小数点以下の桁数を取得・確認
Select Case strSplit.Length
Case 1
'整数の場合
intDigits = 0
Case 2
'小数点以下が存在する場合
intDigits = LEN(strSplit(1))
Case Else
MsgBox("数値と認識できません。", vbOKOnly, "形式エラー")
Return 1
End Select
If intDigits > pintDigitsLimit Then
MsgBox("小数点の桁数がオーバーしています。", vbOKOnly, "桁数エラー")
Return 4
End If
dblCheck = CDbl(pstrText)
If dblCheck < pdblMin Then
MsgBox("値が小さすぎます。", vbOKOnly, "範囲エラー")
Return 2
End If
If dblCheck > pdblMax Then
MsgBox("値が大きすぎます。", vbOKOnly, "範囲エラー")
Return 3
End If
'③数値を整形し、小数点で分割
strTemp = Format(dblCheck , "#.#######")
strSplit= Split(strTemp , ".")
'④小数点以下の桁数を取得・確認
Select Case strSplit.Length
Case 1
'整数の場合
intDigits = 0
Case 2
'小数点以下が存在する場合
intDigits = LEN(strSplit(1))
Case Else
MsgBox("数値と認識できません。", vbOKOnly, "形式エラー")
Return 1
End Select
If intDigits > pintDigitsLimit Then
MsgBox("小数点の桁数がオーバーしています。", vbOKOnly, "桁数エラー")
Return 4
End If
Return -1
End Function
End ClassEnd Function
関数での処理の違いは引数の代わりにプロパティに確認する文字列や
数値の範囲を指定したり、
実際チェックを行なう処理をメソッドとして作成しておくのは
前回と同様です。
このような数値の桁数や範囲を確認する処理は文字数の確認と同様に
様々なシステムで使用することができますので、
一つ作成しておくと便利かと思います。
他にもいろいろと方法もございますし、
開発するシステムによっては、よりふさわしい方法もあるかと思いますが、
御参考にしていただければと思います。
サンプルはVB.NETで作成しておりますが、
考え方はどんな言語でも同じですので、
参考にしていただければと思います。
前回と同様です。
このような数値の桁数や範囲を確認する処理は文字数の確認と同様に
様々なシステムで使用することができますので、
一つ作成しておくと便利かと思います。
他にもいろいろと方法もございますし、
開発するシステムによっては、よりふさわしい方法もあるかと思いますが、
御参考にしていただければと思います。
サンプルはVB.NETで作成しておりますが、
考え方はどんな言語でも同じですので、
参考にしていただければと思います。
0 件のコメント:
コメントを投稿