大きい数を10、100、1000などの10の累乗で割ると上位の桁を取り出すことができます(参考:【Excel】INT関数で割り算の答えを整数値で求めることを利用した応用問題)。そして、そのときの余りは下位の桁となります。例えば、3456円の金額を支払うために必要な1000円札の枚数は、割り算をすることによって3枚であることが分かりますが、余りの456円は硬貨で支払うことになります。
- 3456÷1000=3・・・456
100で割ると商が34で余りが56、10で割ると商が345で余りが6となりますが、いずれも「3456」という数が商と余りに分かれています。
- 3456÷100=34・・・56
- 3456÷10=345・・・6
そこで、今回は、MOD関数を用いて下の位や小数部分を取り出すことについて出題します。
目次
1.小数部分を取り出す
問題
A列に小数を入力した。整数部分と小数部分に分離しなさい。
解説
プラスの小数の場合、小数点の左側を「整数部分」、右側を「小数部分」といいます。
整数部分を取り出すというのは、プラスの小数の場合は小数点以下を切り捨てることと同じですから、INT関数を使います(参考:【Excel】INT関数の入力と修正、元の数を超えない最大の整数とは何か)。
- =INT(A2)
小数部分は元の数から整数部分を引いた残りです。
- =A2-B2
別解
ところで、余りのある割り算で、割り算の商は「割り算の結果を超えない最大の整数」であり、INT関数で求められます。3500を1000で割ったときの商が3になるのは、割り算の結果である「3.5」を超えない最大の整数が3だからです。INT関数を使うと、INT(3500/1000)=3です。
余りは、元の数から割る数*商を引いて求めることができます。余りが500になるのは、3500 - 1000*3 = 500だからです。
ここで、968.723を1で割ることを考えると、968.723 ÷ 1 = 968.723なので、商は968です。INT関数を使うと、INT(968.723/1)=968です。1で割ったときの商は、元の数の整数部分です。
余りは、元の数から割る数*商を引いて求めますから、968.723 - 1*968 = 0.723となります。
したがって、1で割ったときの商は整数部分、余りは小数部分になります。
MOD関数を挿入します。
元の数を1で割ったときの余りを求めます。小数部分になります。
- =MOD(A2,1)
このように、ある小数を整数部分と小数部分に分離するには、INT関数とMOD関数を使います。
2.整数であることの判定方法
問題
A列の値が整数であれば○と表示しなさい。
解説
入力されている値が整数である場合、INT関数で小数部分を切り捨てても変わりません。このことを利用して整数であることを判定することができます。
元の数とINT関数によって切り捨てた値を比較します。整数の場合だけTRUEになります。
- =A2=INT(A2)
IF関数を挿入します(参考:【Excel】一致の判定はイコール「=」、等しくないことの判定は不等号2つ「<>」)。
TRUEであれば○、FALSEであれば空白を返します。
- =IF(A2=INT(A2),"○","")
これで完成です。
別解
整数には小数部分が無いので、MOD関数で小数部分を求めると0になります。
0であることを判定するのに比較演算は不要なので、MOD関数をそのまま論理式として判定に使用することができます(参考:IF関数の条件に「等号や不等号が必要」と思っているなら、IF関数を勉強し直してほしい)。TRUEであれば0ではないので小数、FALSEであれば0ということなので整数となります。
IF関数を挿入します。さらに、MOD関数を挿入します。
小数部分を求めるため1で割ります。
TRUEであれば空白を返し、FALSEであれば○とします。これで完成です。
- =IF(MOD(A2,1),"","○")
3.小数第2位以降の取得
問題
A列に小数を入力した。小数第1位までと、小数第2位以降を分離しなさい。ただし、小数第2位以降が無い場合は0とする。
解説
小数第1位までを求めるには、ROUNDDOWN関数を使います(参考:【Excel関数】ROUNDUPとROUNDDOWN、切り上げ、切り捨て、四捨五入の練習問題)。桁数は1です。
- =ROUNDDOWN(A2,1)
<補足>ちなみに、これを10倍すれば小数第1位だけを取り出すことができます。
元の数から小数第1位までを引けば小数第2位以降になります。
別解
1で割ったときの余りは小数部分です。小数部分は1未満の部分を取り出したものです。
これと同じように0.1で割ったときの余りを求めると、0.1未満の部分を求めることができます。
いっぱんにXで割ったときの余りは、X未満の部分を求めるのと同じであり、その答えは0以上X未満になります。
MOD関数を挿入します。
0.1で割ります。これで完成です。
- =MOD(A2,0.1)
4.下位の桁を取り出す
問題
A列に年月日を表す8桁の数値を入力した。INT関数またはMOD関数を用いて上4桁と下4桁に分離しなさい。
解説
長い数値のうち、上の桁を取り出すにはINT関数を使います。万の位以上を取り出すので10000で割ります。
10000で割ると10000以上の部分を取り出すことができますが、このときの余りは10000未満の部分です。つまり、下4桁の部分となります。上の位を取り出すのはINT関数、下の位を取り出すのはMOD関数です。
MOD関数を挿入します。元の数を10000で割った余りを求めます。これで下4桁の部分を数値として取り出すことができます。
いっぱんに、長い数値が入力されていて、X以上の部分とX以下の部分を分離するには、INTとMODを用いて、Xで割ったときの商と余りを求めます。
別解
10000は10の4乗です。下4桁を取り出すには、10の4乗で割った余りを求めます。
- =MOD(A2,10^4)
長い数値が入力されていて、下のX桁の部分を取り出すには10のX乗で割ったときの余りを求めます。
5.くじの当たり判定
(1)下位の桁が一致することの判定
問題
お年玉付年賀はがきが届いたので、A列にくじの番号を6桁で入力した。しかし、数値として入力しているため、先頭が0の場合は表示されなかった。
その後、抽選会が行われたので、3行目に当せん番号を入力した。1等は下6桁、2等は下4桁、3等は下2桁が一致すれば当たりである。くじの番号と照合して、当たりの場合は「当たり」と表示しなさい。
解説
下6桁を取り出すには10の6乗で割ったときの余りを求めます。
IF関数を挿入します。さらに、MOD関数を挿入します。
列固定の複合参照にします。10の6乗で割ります。桁数は行固定です(参考:【Excel複合参照】行固定や列固定のドルマークの意味と練習問題)。
当せん番号と比較します。当せん番号は行固定です。一致すれば当たり、一致しなければ空白を返します。
- =IF(MOD($A4,10^B$2)=B$3,"当たり","")
これで完成です。
(2)先頭の0があってもよいか
問題
A列と3行目の表示形式を文字列として先頭の0も入力した。この場合も、さきほどの設問(1)の数式で正しく判定できるか。
解説
Excelは表示形式が標準の場合、先頭に0を入力しても消えてしまいます。そこで、A列を表示形式を文字列にします。これで先頭に0を入力することができます。
さきほど入力した数式はエラーにならず、正しく判定できます。
表示形式を文字列として入力したとしても、それが数値に変換できる場合は、自動的に数値に変換して余りを求めます。
今度は、3行目の当せん番号を文字列にして入力します。「当たり」が消えてしまいました。
MOD関数が数値を返すのに対して、当せん番号B$3が文字列なので不一致となるのです。
この場合は、1をかけて文字列を数値に変換すればうまくいきます(参考:【Excel】数値と文字列の違い、数値と文字列の変換方法の総まとめ)。
- =IF(MOD($A4,10^B$2)=B$3*1,"当たり","")
解説は以上です。