■10進数から○進数へ変換
■○進数から10進数へ変換
注:Val関数を使って変換をしているサンプルコードも見かけますが
Val関数はあくまでも前方から数字として認識可能な物を数字とする
関数ですので、あまりお勧めできません。
例)オートシェイプの背景色をユーザーが指定できるようにした場合を考える。
ユーザーはFFFFFFを指定仕様としたがタイプしてFFFFFGとしてしまったとする。
この場合、事前に正規表現で16進数でないとエラー警告をだすか
Clng方式の時は、On Error Resume Nextでエラートラップする方法が考えられます
■エラー警告付き1(Clng/Val)
■エラー警告付き2(Clngのみ)
Option Explicit Sub Sample() '8進数へ変換 Debug.Print Oct(7) '7 Debug.Print Oct(8) '10 '16進数へ変換 Debug.Print Hex(15) 'F Debug.Print Hex(16) '10 Debug.Print Hex(255) 'FF End Sub
■○進数から10進数へ変換
Option Explicit Sub Sample() '■ハードコードできる値(変数をつかわず直接記載可能)の場合 '8進数から変換 Debug.Print &O7 '7 Debug.Print &O10 '8 '16進数から変換 Debug.Print &HF '15 Debug.Print &H10 '16 Debug.Print &HFF '255 '■変数の場合 '8進数から変換 Dim OctValue As Long: OctValue = Oct(8) Debug.Print CLng("&O" & OctValue) '8 '16進数からの変換 Dim HexValue As Long: HexValue = Hex(16) Debug.Print CLng("&H" & HexValue) '16 End Sub
注:Val関数を使って変換をしているサンプルコードも見かけますが
Val関数はあくまでも前方から数字として認識可能な物を数字とする
関数ですので、あまりお勧めできません。
例)オートシェイプの背景色をユーザーが指定できるようにした場合を考える。
ユーザーはFFFFFFを指定仕様としたがタイプしてFFFFFGとしてしまったとする。
Option Explicit Sub Sample() Dim HexStr As String: HexStr = "FFFFFG" Debug.Print Val("&H" & HexStr) '1048575 ←FFFFFとして計算する Debug.Print CLng("&H" & HexStr) '16進数に使えない文字があるのでエラーとなる End Sub
この場合、事前に正規表現で16進数でないとエラー警告をだすか
Clng方式の時は、On Error Resume Nextでエラートラップする方法が考えられます
■エラー警告付き1(Clng/Val)
Option Explicit Sub Sample() Dim HexStr As String: HexStr = "FFFFFG" '事前に16進数なのか妥当性をチェックする Dim RegHex As Object Set RegHex = CreateObject("VBScript.RegExp") RegHex.IgnoreCase = True RegHex.Pattern = "^[0-9A-F]+$" If Not RegHex.Test(HexStr) Then '16進数ではない文字がある時はこっち Debug.Print "16進数を指定してください" Else 'かならず16進数が来る Debug.Print Val("&H" & HexStr) Debug.Print CLng("&H" & HexStr) End If Set RegHex = Nothing End Sub
■エラー警告付き2(Clngのみ)
Option Explicit Sub Sample() Dim HexStr As String: HexStr = "FFFFFG" On Error Resume Next Debug.Print CLng("&H" & HexStr) If 0 <> Err.Number Then Debug.Print "16進数を指定してください" End If On Error GoTo 0 End Sub
0 件のコメント:
コメントを投稿