| 
    
     |  | こんばんは。 
 >セルの数式を使用せずにマクロの中で
 >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関数の部分がどうしても
 >オーバーフローを回避する方法を教えて下さい。
 
 |  |