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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
VBAで除算の商・・・
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
小数第4位まで求めろと言われた...
-
四捨五入した数の合計が100.0%...
-
⑸四捨五入して、千の位までのが...
-
「小数点以下第2位までで答えな...
-
小数点以下「3桁で」四捨五入?...
-
約の範囲は一体どの位からなの...
-
Excelで構成比の各要素の合計を...
-
概数と四捨五入
-
小数点第1位切り上げ?
-
Excelで二捨三入したいのですが...
-
1796.875 を有効数字3桁で表す...
-
7000g が 6500g になってしま...
-
四捨五入して千のくらいまでの...
-
小数1位と小数1位止との違い
-
割合(%)を出すとき、小数第...
-
割合を%にして全て加えると1...
-
新しい算数(小4) 四捨五入・...
-
問題をそのまま書きます。 四捨...
-
何万強とか何万弱というのはど...
-
エクセル関数の50円単位の四捨五入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
小数第4位まで求めろと言われた...
-
四捨五入した数の合計が100.0%...
-
「小数点以下第2位までで答えな...
-
約の範囲は一体どの位からなの...
-
小数点以下「3桁で」四捨五入?...
-
概数と四捨五入
-
Excelで二捨三入したいのですが...
-
1796.875 を有効数字3桁で表す...
-
エクセルの整数未満四捨五入の...
-
7000g が 6500g になってしま...
-
Excelで構成比の各要素の合計を...
-
何万強とか何万弱というのはど...
-
小数点第1位切り上げ?
-
割合(%)を出すとき、小数第...
-
エクセル関数の50円単位の四捨五入
-
小数1位と小数1位止との違い
-
四捨五入でどこから切り上げる...
-
1.554・・・ の小数点以下第1位...
-
問題をそのまま書きます。 四捨...
-
新しい算数(小4) 四捨五入・...
おすすめ情報