Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7823 / 13644 ツリー ←次へ | 前へ→

【36649】誰かご教授ください kogure 06/4/6(木) 20:21 質問[未読]
【36650】Re:誰かご教授ください とおりすがり 06/4/6(木) 21:53 発言[未読]
【36654】Re:誰かご教授ください ichinose 06/4/6(木) 22:50 発言[未読]
【36655】Re:誰かご教授ください kogure 06/4/7(金) 8:20 お礼[未読]

【36649】誰かご教授ください
質問  kogure  - 06/4/6(木) 20:21 -

引用なし
パスワード
   Sub test()
  test1 = Cells(1, 1).Value
  test2 = Cells(1, 2).Value
  Cells(2, 1).Value = test1 + test2
  Cells(3, 1).Value = CInt("&H" & (Cells(2, 1).Value))
End Sub

上記のようにセルないの文字列を連結させ、
その文字列を16進数に変換しているのですが、
test1の文字列が00A0
test2の文字列が00B0
のようなときはエラーとなってしまいます。
00A000B0のような場合は変換することが出来ないのでしょうか?
また変換後の数値をマイナスにしないようにするにはどうすればよいのでしょうか?

【36650】Re:誰かご教授ください
発言  とおりすがり  - 06/4/6(木) 21:53 -

引用なし
パスワード
   ▼kogure さん:
>Sub test()
>  test1 = Cells(1, 1).Value
>  test2 = Cells(1, 2).Value
>  Cells(2, 1).Value = test1 + test2
>  Cells(3, 1).Value = CInt("&H" & (Cells(2, 1).Value))
>End Sub
>
>上記のようにセルないの文字列を連結させ、
>その文字列を16進数に変換しているのですが、
>test1の文字列が00A0
>test2の文字列が00B0
>のようなときはエラーとなってしまいます。
>00A000B0のような場合は変換することが出来ないのでしょうか?
>また変換後の数値をマイナスにしないようにするにはどうすればよいのでしょうか?

16進数は分かりませんが、&H00A000B0は10進数で表すといくつになりますか?

【36654】Re:誰かご教授ください
発言  ichinose  - 06/4/6(木) 22:50 -

引用なし
パスワード
   kogure さん:
とおりすがり さん:
こんばんは。


>16進数は分かりませんが、&H00A000B0は10進数で表すといくつになりますか?
とおっしゃっているのは、

>>  Cells(3, 1).Value = CInt("&H" & (Cells(2, 1).Value))

  この答えがIntegerの範囲を超えているからだと思います。
Cint---->CLngに変えて見てください。

とりあえず、エラーは回避できます。


>>また変換後の数値をマイナスにしないようにするにはどうすればよいのでしょうか?

N進数を---10進数に変換する計算を算数でやってしまうのが簡単そうですよ!!


Sub main()
  Dim decnum As double
  Dim hexnum As string
  test1 = Cells(1, 1).Value
  test2 = Cells(1, 2).Value
  Cells(2, 1).Value = test1 + test2
  hexnum = Trim(Cells(2, 1).Value)
  For i = 0 To Len(hexnum) - 1
    decnum= decnum + (16 ^ i) * Val("&H" & Mid(hexnum , Len(hexnum) - i, 1))
    Next i
  Cells(3, 1).Value = decnum
End Sub

【36655】Re:誰かご教授ください
お礼  kogure  - 06/4/7(金) 8:20 -

引用なし
パスワード
   ▼ichinose さん:
>kogure さん:
>とおりすがり さん:
>こんばんは。
>
>
>>16進数は分かりませんが、&H00A000B0は10進数で表すといくつになりますか?
>とおっしゃっているのは、
>
>>>  Cells(3, 1).Value = CInt("&H" & (Cells(2, 1).Value))
>
>  この答えがIntegerの範囲を超えているからだと思います。
>Cint---->CLngに変えて見てください。
>
>とりあえず、エラーは回避できます。
>
>
>>>また変換後の数値をマイナスにしないようにするにはどうすればよいのでしょうか?
>
>N進数を---10進数に変換する計算を算数でやってしまうのが簡単そうですよ!!
>
>
>Sub main()
>  Dim decnum As double
>  Dim hexnum As string
>  test1 = Cells(1, 1).Value
>  test2 = Cells(1, 2).Value
>  Cells(2, 1).Value = test1 + test2
>  hexnum = Trim(Cells(2, 1).Value)
>  For i = 0 To Len(hexnum) - 1
>    decnum= decnum + (16 ^ i) * Val("&H" & Mid(hexnum , Len(hexnum) - i, 1))
>    Next i
>  Cells(3, 1).Value = decnum
>End Sub


ありがとうございます。
早速試してみます。

7823 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free