ITパスポート試験や基本情報技術者試験の表計算に出題される関数の中に、「整数部」と「剰余」があります。Excel関数でいえば、INTとMODです。
基本情報で出題されるのは年に一回の割合なので、検索関数と比べるとそんなに頻出とは言えません。最近では、どちらかと言えばITパスポート試験のほうがよく出題されます(参考:【Excel】INTやMOD関数を用いて数値の一部を取り出す整数問題と関数の過去問(ITパスポート表計算Part3))。
Excelの教科書や逆引き辞典にはINTとMODの簡単な使い方は載っていますが、利用例があまり紹介されていません。そこで、今回は、INTとMODを使った計算のうち、情報処理試験の受験者が最低限理解しておくべき重要事例を解説します。
目次
1.基本情報技術者試験の表計算について
基本情報技術者試験の問題に使用される関数の説明についての著作権はIPA情報処理推進機構にあります(IPA公式サイト:https://www.jitec.ipa.go.jp/)。また、基本情報技術者試験(表計算)の詳細は、市販のテキストをご覧ください。
2.まずは仕様を確認しよう
問題
A列に、-6から6までの整数を入力した。B列に2で割ったときの答えの整数部、C列に2で割ったときの剰余を求めなさい。
解説
ExcelのINT関数・MOD関数の仕様と、情報処理試験の仕様はほぼ同じです。
INT・・・整数部(算術式)
算術式の値以下で最大の整数を返す。MOD・・・剰余(算術式1,算術式2)
算術式1の値を被除数、算術式2の値を序数として除算を行ったときの剰余を返す。関数「剰余」と「整数部」は、剰余(x,y) = x - y * 整数部(x / y) という関係を満たす。
セルB2に「=INT(A2/2)」と入力します。
INT関数は、元の数が0以上の場合、小数点以下切り捨てになります。例えば、5を2で割ると答えは2.5ですが、小数点以下を切り捨てると2になります。
しかし、元の数がマイナスの場合、それより小さい整数を返すので切り捨てにはなりません。例えば、-5を2で割ると答えは-2.5ですが、それより小さい整数を求めるので-3になります。
セルC2に「=MOD(A2,2)」と入力します。0と1だけになります。これによって、「元の数値=整数部*2+剰余」という関係式が成り立ちます。元の数値がプラスかマイナスかにかかわらず、MOD関数は0以上で、割った数-1 以下となります。
3.算数の問題
(1)掛け算
問題
税抜価格7,325円に10%の消費税を加算し、小数点以下切り捨てで税込価格を求めなさい。また、この税込価格に対してランク別のポイントを付与したい。ポイント数を小数点以下切り捨てで求めなさい。
解説
税込価格は小数が発生するので原則としてINTで切り捨てます。10%増なのでパーセンテージは「1+E1」です。したがって「=INT(B1*(1+E1))」となります(参考:割合の計算が分からない原因は、かけ算による変化を理解していないこと)。
この税込価格にポイントを付与します。パーセンテージはランクで決まるのでVLOOKUPで検索して「VLOOKUP(B3,D2:E4,2,0)」です。したがって「=INT(B2*VLOOKUP(B3,D2:E4,2,0))」となります。
(2)割り算
問題
いま、500円の商品券30枚を持っている。8,057円を商品券で支払い、500円未満の端数を現金で支払う場合、現金でいくら支払えばよいか。また、商品券は残り何枚になるか。
解説
500円未満の端数は、500で割ったときの余りです。「=MOD(B2,B6)」と入力します。
商品券が使える枚数は、支払額を500で割って切り捨てるので「INT(B2/B6)」です。したがって、残り枚数は、30枚から引けばよいです。「=B7-INT(B2/B6)」と入力します。
4.INTとMODの重要パターン
整数部や剰余は、掛け算や割り算だけではありません。基本情報やITパスポートを受ける人であれば当然知っておかなければならない問題をおさらいしましょう。
(1)小数部分の取得
問題
A列に、1/7、2/7、3/7、・・・を入力した。B列に小数部分を求めなさい。
解説
小数点の左側の整数部分はINTを使いますが、小数部分は元の数から整数部分を引けばよいです。
- =A1-INT(A1)
別解
上記の仕様によると、MOD(x,y)=x-y*INT(x/y)なので、y=1とすると、MOD(x,1)=x-INT(x) です。つまり、元の数xから整数部INTを引いたものになるので、小数部分を意味しています。いっぱんにMODの第2引数を1にすると小数部分を求めることができます。
- =MOD(A1,1)
(2)Nの倍数の判定
問題
A列に連番を入力した。3の倍数を「年度末」、12の倍数を「年末」と表示しなさい。
解説
4年に一度、3か月に一度など定期的に行うイベントがあります。Nの倍数の判定をするときは剰余を使います。Nで割ったときに余りが0であれば、Nの倍数と言えます。「=IF(MOD(A1,3)=0,"年度末","")」となります。
12の倍数を年末にする場合は、「=IF(MOD(A1,12)=0,"年末",IF(MOD(A1,3)=0,"年度末",""))」となります。
(3)Nの倍数で切り捨て
問題
200円につき1ポイントを付与するとき、7523円の場合は何ポイントになるか。
また、18時22分を15分単位で切り捨てる場合、何時何分になるか。
解説
「200円につき1ポイント」は次の2つに意味を持ちます。
- 200円ごとに1ポイントを与える
- 200円に満たない端数は切り捨ててポイントを付与しない
「=INT(B1/200)」と入力します。
15分単位で切り捨てる場合、時間は変わりません。「=A1」と入力すればよいです。
15分単位で切り捨てると15の倍数になるはずですから、式は「整数*15」となるはずです。いったん15で割って、それを15倍します。
*補足*ちなみに、Excelには、Nの倍数の切り上げ/切り捨てをする関数として、FLOOR/CEILINGがありますが、情報処理試験の仕様に無いのでINTを使用します。
(4)各桁を求める
問題
9桁の数値がある。これを上から1桁・3桁・5桁に分離しなさい。また、下4桁を0にしなさい。
解説
数値の左側(上の桁)を求めるにはINTを使います。「=INT(A1/100000000)」です。累乗を使うと「=INT(A1/10^8)」となります。
数値の右側(下の桁)を求めるにはMODを使います。「=MOD(A1,100000)」です。累乗を使うと「=MOD(A1,10^5)」となります。
数値の途中の部分を取り出すには、INTとMODを組み合わせます。上の4桁を取り出してから下3桁を取ると考えると「=MOD(INT(A1/10^5),1000)」となります。また、下8桁を取り出してから上3桁を取ると考えると「=INT(MOD(A1,10^8)/1000)」となります。
ちなみに、Excelには文字列の一部を取り出す関数として、LEFT/MID/RIGHTがありますが、情報処理試験の仕様に無いのでINT/MODを使用します。数値の場合、LEFT/MID/RIGHTの代わりが、INT、INT(MOD)、MODです。
上5桁は「INT(A1/10000)」なのでこれを1万倍すればいいです。
別解
切り捨て(ROUNDDOWN)を用いて「=ROUNDDOWN(A1,-4)」でもよいです。
(5)Nの倍数で切り上げる
問題
夏のオリンピックは西暦が4の倍数の年に開催される。セルB1に今年の西暦を入力した時に、次回のオリンピック開催年を求めなさい。
(例)2019年→2020年、2020年→2024年
解説
オリンピック出場が期待される選手は次回のオリンピックまであと何年かが気になります。西暦が4の倍数の時は次回のオリンピックまでに4年待つということです。
西暦を4で割ったときの余りが1の場合はオリンピックまであと3年、余りが2の場合はあと2年、余りが3の場合はあと1年です。つまり、次回のオリンピックまで待つ年数は「4-MOD(西暦,4)」です。
したがって、「=B1+4-MOD(B1,4)」となります。
(6)最大値を0にする
問題
さきほどの問題で、オリンピックが開催される年は4を加算しない場合はどうか。
(例)2019年→2020年、2020年→2020年、2021年→2024年
解説
オリンピックをTVで観戦したい一般人の立場で考えると、通常は次回オリンピック開催まで待つことになりますが、オリンピック開催年にあたる年であれば4年待つ必要はありません。開催年にあたる年の場合に、その西暦をそのまま返すということは、4を加算せず0を加算するということです。
1~4のうち、4を強制的に0にするには4で割った余りを求めます。
このように、1から始まる連番の最大値を強制的に0にするにはMODを使います。
「=MOD(~~~,4)」とします。
したがって、「=B1+MOD(4-MOD(B1,4),4)」となります。
*補足*この数式は、さらに「=B1+MOD(-B1,4)」と簡単にすることができますが、解説は省略します。
(7)連番を繰り返しにする
問題
A列に連番を入力し、これらの連番をセルF3以降に4列に並べた。列と番号を求めなさい。
解説
4つずつで区切ると繰り返しになっていることが分かります。繰り返しになっている数列はINTかMODで求めることができます。
4で割ったときのINTとMODを求めます。INTが1つずれています。
- =INT(A2/4)
- =MOD(A2,4)
元の数から1を引けば、4個ずつになります。
- =INT((A2 - 1)/4)
さらに、499を引くことによって1から始まる数字になります。
- =INT(A2-1/4) - 499
Nの倍数をNで割ると余りが0になりますが、これをNにするには、元の数から1を引いて余りを出した後に1を足せばよいです。
「1、2、3、0」を「1、2、3、4」にするには、MOD(~-1,4)+1とします。
- =MOD(A2 - 1,4) + 1
これらを「~列」「~番」に変換すればよいです。INDEX関数を使います(参考:基本情報技術者試験の表計算に出題される関数一覧とExcelを用いた簡単な練習方法)。
- =INDEX($F$2:$I$2,1,INT((A2-1)/4)-499)
- =INDEX($E$3:$E$11,MOD(A2-1,4)+1,1)
5.日付と時間の計算
(1)10進数表記の分離
問題
日付を8桁の整数で入力した。年・月・日に分離しなさい。また、日付と時間・分を12桁の整数で入力した。時間と分を求めなさい。
解説
年は上4桁なので「=INT(A1/10^4)」です。日は下2桁なので「=MOD(A1,100)」です。
また、月は「=MOD(INT(A1/100),1000)」または「=INT(MOD(A1,10000)/100)」となります。
時間は「=INT(MOD(A3,10^4)/100)」、分は「=MOD(A3,100)」です。
(2)曜日の一致判定
問題
2つの日付の曜日が一致しているかを判定しなさい。
解説
日付は通常、シリアル値(1900/1/1からの経過日数)で表される整数値なので、INTやMODが使えます。7で割ったときの余りが同じであれば、曜日が等しいといえます。
- =MOD(A1,7)
別解
シリアル値の大きい日付(最近の日付)から小さい日付を引くとその間の日数になりますから、それが7の倍数であれば、曜日が一致しているといえます。7の倍数でなければ曜日が異なるということです。
- =MOD(A2-A1,7)
(3)午前0時からの経過分数
問題
A列に、元日の午前0時からの経過時間を入力した。この数値の単位は「分」である。例えば、元日の午前0時から141分経過すると2時21分である。それぞれ、時刻を計算しなさい。
解説
基本情報技術者試験では、時間を分単位で管理する表が出題されることがあります。時刻に直すと「分」は0~59なので、60で割ったときの余りであることが分かります。
逆に、「時間」はINTを使えばよいです。
24時間を超えているものがあります。これは元日から1日以上が経過していることを表します。したがって、24で割って余りを求めます。
- =MOD(INT(A2/60),24)
ちなみに、経過日数は「=INT(A5/1440)」です(1日=1440分)。
(4)時刻のシリアル値から時間と分を求める
問題
A列に時刻のシリアル値(24時間=1とする小数)を入力した。時間と分を整数で求めなさい。
解説
Excelでは時間や分を取り出す関数(HOUR/MINUTE)がありますが、情報処理試験ではそれが無いので、INTとMODで求めます。
時刻のシリアル値を時間に換算するには24倍します(参考:【Excel】時間の掛け算、シリアル値と時間の換算、時間の合計を求めるときの注意点)。そして、小数点以下を切り捨てます。
また、分に換算するには1440倍します。
869分になりますが、さきほどの問題と同じように60で割った余りを求めます。
解説は以上です。