■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 件のコメント:
コメントを投稿