
No.5ベストアンサー
- 回答日時:
> ようするに、切捨てや繰上げなどあるみたいなのですが、よく分からず困っているのです。
Mod演算子のヘルプに、
「このとき浮動小数点数は整数に丸められます」 と書かれています。
では、どのように丸められるか実験してみましょう。
15 を 1.5 で割った余りを考えます。
手で計算すると 割算の答えは 10 で余りは 0 ですね。
では、イミディエイトウィンドウで計算すると
? 15 mod 1.5
1
結果は 1 です。
あ、これは先に丸めて 15 Mod 2 を計算しているんだな、
ということが分かりますね。
他にも計算してみましょう。
? 15 Mod 1.4
0 (15 Mod 1) に一致
? 15 Mod 1.6
1 (15 Mod 2) に一致
ここで、四捨五入されたと考えるのはまだ早い。
次に 15 Mod 2.5 を計算してみましょう。
? 15 Mod 2.5
1
あれれ?
四捨五入なら 15 Mod 3 で 0 になるはずですね。
どうなっているの???
答えは、ここで行われているのは四捨五入ではなく
銀行型丸めといわれているもので
小数部が .5 の場合に、偶数に丸めるというものです。
1.5 の場合には、1 と 2 のうち、偶数である 2 の方に丸められ
2.5 の場合には、2 と 3 のうち、偶数である 2 の方に丸められるのです。
VBA のRound 関数も同様の丸めが行われます。
四捨五入が必要なら、自作関数などの工夫が必要になります。
お分かりいただけたでしょうか。
この回答への補足
ありがとうございます。
「このとき浮動小数点数は整数に丸められます」これが、なんのことだかちんぷんかんぷんでした。情けない限りです。
よく分かりました。すごくうれしいです。
No.6
- 回答日時:
こんにちは。
もちろん、Modの演算子自体を覚えようという段階なら、率直なところ、ちょっと試験は厳しいなって思います。しかし、ご質問の趣旨はそんなことではないと思います。以下で書くことは、以前、掲示板でも出てきた話ですし、一般試験レベルの内容ではないので、ああ、そういう話があったなぁ程度でよいと思います。ここらを追求するというのは、かなり大変なんです。
"6.6 mod 2" なんていうものを、VBAとしてきちんと理解していたら、それはそれで立派なものだと思います。
私は、今のところ、VBAはあくまでも趣味の範囲でしかありませんが、私の見た限りでは、この「Mod」 については、かなりの人が実務で間違えます。反面、これは、Excelのワークシート関数のModとも、VB.Net とも仕様が違うからです。しかし、それよりも、もっとも基本的なことですが、Modは、整数値しか扱わないのに、そこに、小数点を含むDouble 型の値を代入するというところに無理があります。
試験だったら、まあ、こういう微妙な内容を含むようなものはないでしょうし、本当に理解するのは、かなり後になってからです。ただ、私は頭が悪いせいなのでしょうか、このVBAの日本語ヘルプだけで理解できませんね。もう何年もOffice VBAとかやっていますが、このヘルプの翻訳だけでは、さっぱり理解できません。しかたがないので、私は、分からなくなると、英語のほうを読むようにしています。
たとえば、「丸める」というのは、英語で、"round" 。意味は、四捨五入すること、もしくは、端数を処理するという一般用語ですが、日本語は必ずしも、一般的ではありません。その定義の説明を抜きにして、話を進めても分からなくなるだけです。
以下の場合は、Mod を使うことによって、keisan のデータ型は自然に決まってきてしまいます。
keisanのデータ型は、確かに、最初に決めてしまえば、それに揃いますが、実際の内部のデータ型の処理は、規則的に決まっています。
それと、以下のようなリテラル値(数値を直接入れる)の書き方は、分かりにくいのです。変数を設けて、リテラル値は極力避けてみれば流れが分かります。
以下のように書いて、ローカルウィンドウで確認してみれば分かってきます。
最初にデータ型を、Variant 型だけにしておいてもよいです。
------------------------------------------------
Sub 答え1()
Dim keisan As Variant
Dim a As Double '-> Mod では、Long型に内部で換えられる
Dim b As Integer
a = 6.6
b = 2
keisan = a Mod b
Range("A1").Value = keisan
End Sub
それを、 a = 6.4 にすると、keisan は、0 になります。つまり、a のDouble 型を、Long型に換えてみると、 a の値は、6.6 -> 7 であり、6.4 は、6 なのです。ただし、6.5 は、6です。この偶数丸めも、ステップモードとローカルウィンドウで確認することが可能です。
ワークシートの場合は、
=MOD(6.6,2)
0.6
になります。
ところが、
a = -6.6, b = 2 とすると、単に、符号を反転した値だけが出てきてしまいますから、
-1 が出てきます。ワークシートでは、1.4 です。
なお、ヘルプの文面は、人に理解させるための文章ではなくて、分かっている人が自分の理解しているものを言葉で再確認するためのものだと、私個人は思っています。(私は、頭が悪いせいかもしれません。)
ところで、VBA試験とは、Excel VBA エキスパートのベーシックかスタンダードとかですか?これらは、4択とかの問題ですし、ほぼ、ここらは間違えることはありません。何度も練習問題をやっていれば、慣れが出るせいなのか、間違いなくできます。理解とは別だと思います。
せいぜい、
次の演算の結果として正しいものは?
10 mod 3
というようなレベルだと思います。
この回答への補足
ありがとうございます。
試験で難しく問題が出されたらどうしようと心配していましたが、
安心しました。
やっぱり私には難しすぎました。
じっくりと覚えていきます。
No.4
- 回答日時:
ANo1です。
ちんぷんかんぷんということで再度書かせていただきます。ANo3のお方の書かれた内容は100%正しいのですが、ひとまずここではVBAの試験勉強を優先しましょう。
現在のところ問題点はふたつ。
(1)切捨てや繰上げについて
(2)変数keisanが宣言されていない件について
(1):
mod演算子の左右にある数字は基本的に整数だけしか認められないので、もし小数点があった場合は勝手にそれを四捨五入して整数にしちゃうよということになります。
これはmod演算子ほか、「このとき浮動小数点数は整数に丸められます」と書かれた演算子のみのルールです。+演算子などそんなこと書かれていないものは普通に小数の計算ができます。
(2):
変数kotaeは用意されたのに使用はされていなく、逆に変数keisanは用意されていないのに使用はされています。
現実的にはエラーなく動作しますが、こういう明らかに無駄な部分があると試験などでは減点になりますので注意してください。
- - - - - - - - - - - - - - -
どんな勉強もそうですが、最初は判らないことだらけなのはしょうがありませんよね。
VBAの勉強はコンピューター基礎を土台としながら、参考書を読む・実際に作ってみる・ヘルプの内容を理解するの三つをひたすら繰り返すことで覚えます。私だってVBAを時間をかけて覚えましたので。
(いや、他のプログラムと比較するととてつもなく微小ではありますが)
勉強のほう、ひとつひとつ解決しながらがんばってください。
この回答への補足
構文ですが、Dimのあとは、keisan でした。
うっかりしていました。
勉強の仕方をアドバイスしていただき、大変参考になります。
ありがとうございます。
No.3
- 回答日時:
>切捨てや繰上げなどあるみたいなのですが、よく分からず困っているのです。
認識の誤りがあります。
#1さんがヘルプを引用した中に「このとき浮動小数点数は整数に丸められます。」と言う記載の意味が理解出来れば問題は起きません。
(これは計算機用語です。)
浮動小数点(Double/Single)・整数(Integer/Long)の型の違い(変換)が理解出来ている必要があります。
この程度はVBAに限らず、プログラミングでは基本です。
dim num1 as Integer
dim num2 as Single
num2 = 6.6
num1 = num2
Megbox num1
No.1
- 回答日時:
(HELPより抜粋)
- - - - - - - - - - -
Mod 演算子
2 つの数値の除算を行い、その剰余を返します。
構文
result = number1 Mod number2
Mod 演算子の構文は、次の指定項目から構成されます。
指定項目 内容
result 任意の数値変数を指定します。
number1 任意の数式を指定します。
number2 任意の数式を指定します。
剰余演算子は、数式 number1 を number2 で除算し、その余りを演算結果 result として返します。このとき浮動小数点数は整数に丸められます。たとえば、次に示す式では、変数 A (演算結果 result) の値は 5 になります。
A = 19 Mod 6.7
- - - - - - - - - - - - -
「剰余演算子」と難しい言葉を使っていますが、ようは小学校で習う「割り算で割ったあとの余りの数字」です。
keisan = 6.6 Mod 2
上記なら6.6は演算子の処理ルールにより「浮動小数点数は整数に丸められ」るので7となり、それを2で割った余りなので1となります。
VBAに限らずヘルプを読む力は重要ですので、目に穴が開くほどよく読んで力をつければ試験でも実践でも有利です。
試験のほうがんばってください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「小数点以下第2位までで答えな...
-
小数1位と小数1位止との違い
-
約の範囲は一体どの位からなの...
-
小数第4位まで求めろと言われた...
-
利益率の計算などで・・
-
1796.875 を有効数字3桁で表す...
-
小数点以下「3桁で」四捨五入?...
-
100枚弱とは何枚のことですか?
-
エクセルの整数未満四捨五入の...
-
何万強とか何万弱というのはど...
-
EXCELで「有効3桁で四捨五入」
-
エクセルでround関数を使わない...
-
四捨五入について教えてください
-
昔の日本人の身長表記の尺や海...
-
Excelで二捨三入したいのですが...
-
エクセルで有効桁を指定して丸...
-
四捨五入した数の合計が100.0%...
-
五捨五入(偶捨奇入)の数学的...
-
四捨五入でどこから切り上げる...
-
みなさん身長の小数点は無視し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
四捨五入した数の合計が100.0%...
-
約の範囲は一体どの位からなの...
-
小数第4位まで求めろと言われた...
-
小数点第1位切り上げ?
-
「小数点以下第2位までで答えな...
-
Excelで二捨三入したいのですが...
-
エクセル関数の50円単位の四捨五入
-
エクセルで有効桁を指定して丸...
-
何万強とか何万弱というのはど...
-
割合(%)を出すとき、小数第...
-
小数1位と小数1位止との違い
-
Excelで構成比の各要素の合計を...
-
7000g が 6500g になってしま...
-
100枚弱とは何枚のことですか?
-
エクセルでround関数を使わない...
-
割合を%にして全て加えると1...
-
EXCELで「有効3桁で四捨五入」
-
アクセスでの演算で少数点第1位...
-
木の根もとから水平に12メート...
-
⑸四捨五入して、千の位までのが...
おすすめ情報