SAK 図書館
VB テクニック編4 - 数値変換、文字列変換、バイト操作、まるめ計算
■SAK 関数利用規程
・テクニック編で紹介する関数は、私こと Y.SAK の開発関数である。
・著作権明示部分の改編は認めない。
・個人、企業がこれらの関数を使用したり、一部を使用して新たなシステムや
プログラムを開発することは自由です。
・但し、これらの関数を一部でも使用しているソフトウェアをシェアウェア、
その他有償プロダクトとして配布・販売するには、私の許可が必要です。
(無償のフリーソフトウェアなら、自由に配布しても良い。)
・これらの関数を使用して発生した、いかなる形での損害も私こと Y.SAK は
賠償しません。
■数値変換
【使い方】
msgbox CnvVal("1,234,567")
'=======================================================================
' 数値変換
'=======================================================================
'【引数】
' s = コントロールか文字列
'【戻り値】
' double = 数値
'【処理】
' ・カンマ付き数値文字も含めて全て数値に変換して返します。
'【著作権】
' CnvVal() ver 1.00 Copyright (C) 1999 Y.SAK
'【履歴】
' 1999.04.17 sak ver 1.00 新規作成
'=======================================================================
Public Function CnvVal(s As Variant) As Double
Dim dt As Double
'** 数値変換
On Local Error Resume Next
if isnull(s) then
dt = 0
else
dt = 0
dt = s
end if
If Err <> 0 Then
CnvVal = 0
CnvVal = Val(s)
Else
CnvVal = dt
End If
On Local Error GoTo 0
End Function
■数値文字列変換
【使い方】
msgbox CnvStrVal("1,234,567")
'=======================================================================
' 数値文字列変換
'=======================================================================
'【引数】
' s = コントロールか文字列
'【戻り値】
' string = 数値文字列
'【処理】
' ・カンマ付き数値文字も含めて全て有効な数値文字列に変換して返します。
'【著作権】
' CnvStrVal() ver 1.00 Copyright (C) 1999 Y.SAK
'【履歴】
' 1999.04.17 sak ver 1.00 新規作成
'=======================================================================
Public Function CnvStrVal(s As Variant) As String
'** 数値文字列変換
CnvStrVal = LTrim(Str(CnvVal(s)))
End Function
■文字変換
【使い方】
msgbox CnvStr(1234567)
'=======================================================================
' 文字変換
'=======================================================================
'【引数】
' s = コントロールか文字列
'【戻り値】
' string = 文字列
'【処理】
' ・IsNull の場合、"" を返す文字変換をする。
'【著作権】
' CnvStr() ver 1.00 Copyright (C) 1999 Y.SAK
'【履歴】
' 1999.04.17 sak ver 1.00 新規作成
'=======================================================================
Public Function CnvStr(s As Variant) As String
'** 文字変換
On Local Error Resume Next
if isnull(s) then
CnvStr = ""
else
CnvStr = ""
CnvStr = s
end if
On Local Error GoTo 0
End Function
■文字列バイト長
・バイト数チェックによる、バイト長による制限などにも使用できます。
(バイトチェック、byte 数チェック、byte チェック、バイト数制限)
(バイト制限、byte 数制限、byte 制限、文字数チェック、文字チェック)
(文字数制限、文字制限、文字列チェック、文字列制限、バイト計算)
(byte 計算、文字数計算)
【使い方】
msgbox LenByte("abcあいう")
'=======================================================================
' 文字列バイト長
'=======================================================================
'【引数】
' s = 文字列
'【戻り値】
' integer = バイト長
'【処理】
' ・文字列バイト長を VB 2.0 互換の半角を 1 バイト、全角を 2 バイトとし
' て計算して返します。
'【著作権】
' LenByte() ver 1.00 Copyright (C) 1999 Y.SAK
'【履歴】
' 1999.04.17 sak ver 1.00 新規作成
'=======================================================================
Public Function LenByte(s As Variant) As Integer
Dim i As Integer
Dim cd As Integer
Dim ct As Integer
'** バイト数計算
For i = 1 To Len(s)
cd = Asc(Mid(s, i, 1))
If cd < 0 Or cd > 255 Then
ct = ct + 2
Else
ct = ct + 1
End If
Next
'** バイト数セット
LenByte = ct
End Function
■文字列バイト任意切り出し
【使い方】
msgbox MidByte("abcあいう", 2, 4)
'=======================================================================
' 文字列バイト任意切り出し
'=======================================================================
'【引数】
' s = 文字列
' st = 開始位置
' l = バイト長
'【戻り値】
' string = 文字列
'【処理】
' ・文字列を VB 2.0 互換の midb で切り出し返します。
'【著作権】
' MidByte() ver 1.00 Copyright (C) 1999 Y.SAK
'【履歴】
' 1999.04.17 sak ver 1.00 新規作成
'=======================================================================
Public Function MidByte(s As Variant, st As Variant, l As Variant) As String
Dim i As Integer
Dim cd As Integer
Dim ct As Integer
Dim a As String
Dim dt As String
'** 文字列バイト任意切り出し
MidByte = ""
If st < 1 Or l < 1 Then Exit Function
For i = 1 To Len(s)
If ct + 1 >= st Then Exit For
cd = Asc(Mid(s, i, 1))
If cd < 0 Or cd > 255 Then
ct = ct + 2
Else
ct = ct + 1
End If
Next
If i > Len(s) Then Exit Function
ct = 0
For i = i To Len(s)
a = Mid(s, i, 1)
dt = dt + a
cd = Asc(a)
If cd < 0 Or cd > 255 Then
ct = ct + 2
Else
ct = ct + 1
End If
If ct >= l Then Exit For
Next
MidByte = dt
End Function
■まるめ計算
【使い方】
msgbox Marume(123.456, 2, MARU_CUT) '小数第三位切り捨て
msgbox Marume(123.456, 2, MARU_45) '小数第三位切り上げ
msgbox Marume(123.456, 2, MARU_UP) '小数第三位四捨五入
msgbox Marume(123.456 * 2, 2, MARU_45) / 2 '小数第三位二捨三入
'** 一捨二入などその他端数処理は、二捨三入の応用で実現します。
msgbox Marume(123.456, -1, MARU_UP) '1 の位を四捨五入
msgbox Marume(123.456, -3, MARU_UP) '100 の位を四捨五入
'** 戻す桁がマイナスの場合、整数桁の丸めが行える。
(一桁目 繰り上げなど)
'=======================================================================
'** まるめ定数宣言
Public Const MARU_CUT = 0
Public Const MARU_45 = 5
Public Const MARU_UP = 9
'=======================================================================
' まるめ計算
'=======================================================================
'【引数】
' num = 数値
' keta = 戻す桁
' -4 = 1000 の位を処理して 10000 単位にする
' -3 = 100 の位を処理して 1000 単位にする
' -2 = 10 の位を処理して 100 単位にする
' -1 = 1 の位を処理して 10 単位にする
' 0 = 小数点第一位を処理して整数にする
' 1 = 小数点第二位を処理して小数点第一位までにする
' 2 = 小数点第三位を処理して小数点第二位までにする
' 3 = 小数点第四位を処理して小数点第三位までにする
' 4 = 小数点第五位を処理して小数点第四位までにする
' mode = まるめモード
' MARU_CUT = 切り捨て
' MARU_45 = 四捨五入
' MARU_UP = 切り上げ
'【戻り値】
' variant= まるめ値
'【処理】
' ・keta で示された桁数になるように mode に従ってまるめ処理して返します。
'【著作権】
' Marume() ver 1.00 Copyright (C) 1999 Y.SAK
'【履歴】
' 1999.04.17 sak ver 1.00 新規作成
'=======================================================================
Public Function Marume(num As Variant, keta As Variant, mode As Variant) As Variant
Dim kingaku As Variant
Dim shift As Variant
kingaku = CDec(num)
shift = CDec(10 ^ (keta + 1))
Marume = CDec(int((kingaku * shift + CDec(mode)) / 10) / CDec(shift / 10))
End Function
■VB テクニック編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料