|
こんばんは。
>セルの数式を使用せずにマクロの中で
>10進数の値を16進数に変換が必要で以下の数式を使用しています。
>最初のうちはLong型の範囲でよかったのですが、
>最大2^32-1=0xFFFFFFFFのまで必要になりました。
>そのため、オーバーフローを起こしてしまいます。
もっと桁数が必要なら、
16進変換をVBAでシミュレートすれば良いのですが
(10進数を16でどんどん割っていって余りを逆に繋げれば良いのですが、
ゆとり教育世代はやらないんだってねえ、中学で)、
4バイトで足りる数字なら・・・、
Function vbDec2Hex(num As Double, Optional n As Byte = 0) As String
On Error Resume Next
Dim wk As Long
wk = CLng(num)
If Err.Number <> 0 Then
wk = -(2 ^ 32 - num)
End If
vbDec2Hex = Hex$(wk)
vbDec2Hex = String(n - Len(vbDec2Hex), "0") & vbDec2Hex
On Error GoTo 0
End Function
↑こんな関数では?
Sub test()
MsgBox vbDec2Hex(256)
MsgBox vbDec2Hex(255, 4)
MsgBox vbDec2Hex(4294967295#)
End Sub
試してみてください。
Hexで80000000以上の数は、負の数に置き換えてから、Hex関数を使います。
>
>データ型を変更したのですが、Hex関数の部分がどうしても
>オーバーフローを回避する方法を教えて下さい。
|
|