セルA1に3,000,000,000を入力。これを10,000,000で割って、余りをだして、セルB1に余りを表示させようとします。 Sub test1() Range("b1").Value = Range("a1").Value Mod 1000000 End Sub この場合、オーバーフローのエラーがでます。 これを、A1に2,147,483,647を入れるとエラーがでません。これは、変数利用の場合の長整数型のLONGで扱える範囲と関係していることは理解できました。 セルA1に3,000,000,000を入力して、エラーがでないようにするには、10進数型に変更すればよいのではないかと思い、下記のように変更してためしましたが、やはりオーバーフローのエラーがでます。 Dim d As Variant Dim amari As Variant d = CDec(Range("a1").Value) '10進数に変換 amari = d Mod 10000000 Range("b1").Value = amari ◎セルA1に3,000,000,000を入力して、余り計算をエラーを出さずに行うにはどうすればよいかを教えてください。 (因みに、中級まで受講完了しておりますが、実務で対応している時に、かかる問題が生じましたので、算術演算子のところで質問させていただきました。) よろしくお願いします。
nobashiさんの投稿
(投稿ID: 4827) 添付ファイルのダウンロード権限がありません
Sub test1()
Range("b1").Value = Range("a1").Value Mod 1000000
End Sub
この場合、オーバーフローのエラーがでます。
これを、A1に2,147,483,647を入れるとエラーがでません。これは、変数利用の場合の長整数型のLONGで扱える範囲と関係していることは理解できました。
セルA1に3,000,000,000を入力して、エラーがでないようにするには、10進数型に変更すればよいのではないかと思い、下記のように変更してためしましたが、やはりオーバーフローのエラーがでます。
Dim d As Variant
Dim amari As Variant
d = CDec(Range("a1").Value) '10進数に変換
amari = d Mod 10000000
Range("b1").Value = amari
◎セルA1に3,000,000,000を入力して、余り計算をエラーを出さずに行うにはどうすればよいかを教えてください。
(因みに、中級まで受講完了しておりますが、実務で対応している時に、かかる問題が生じましたので、算術演算子のところで質問させていただきました。)
よろしくお願いします。
nobashiさんのコメント
(コメントID: 6767)
MODで余りを出す場合は、型の前提がlongしかできないようでした、別の方で余りも計算する方法がわかりましたので、ご回答は結構です。お騒がせしました。
また、よろしくお願いします。
小川 慶一さんのコメント
(コメントID: 6768)
こんにちは。
解決されたようですので、コメントは簡単に。。
今日では、 LongLong 型という型があります。
64bitマシンの登場に合わせてでてきたものかと。
これに値を入れてからだと動作します。
nobashiさんのコメント
(コメントID: 6773)
ご丁寧にご回答していただきありがとうございました。
Long Long型があるとは全く知りませんでした。参考にさせていただきます。
> nobashiさん:
>
> こんにちは。
>
> 解決されたようですので、コメントは簡単に。。
>
> 今日では、 LongLong 型という型があります。
>
> 64bitマシンの登場に合わせてでてきたものかと。
> これに値を入れてからだと動作します。
>
>
>
小川 慶一さんのコメント
(コメントID: 6777)
こんばんは。
> Long Long型があるとは全く知りませんでした。参考にさせていただきます。
正直なところ、この桁数のことは、事務仕事では、必要に迫られることがあまりないので気にならないというもあり、その存在を知ったのは僕自身も最近です。
ひきつづき、よろしくお願いいたします。