足し算で「10+30」の答えは40となりますが、世の中には10と30を足して40にならないことがあります。例えば、10月の30か月後は、40月ではなく4月です。また、10時の30時間後は、40時ではなく16時です。月は1~12の繰り返し、時間は0~23の繰り返しで、基本的に上限を超えることはありません。
このように、上限・下限が決まっていて、繰り返しになっているものは、MOD関数を用いて答えを修正しなければなりません。また、「3月の5か月前」は引き算で書くと「3 - 5 = -2」となりますが、引き算した結果がマイナスにならないようにしなければなりません。これもMOD関数を使えば解決できます。
そこで、今回は、MOD関数で求められる余り(剰余)の繰り返しの性質を利用して、足し算・引き算の答えを補正する方法、ローテーションによって数値をずらす方法などについて出題します。
目次
1.引き算を修正する
(1)マイナスの余りの性質
問題
-5から30までの整数を入力した。マイナスの数に24を足しなさい。さらに、24以上の数から24を引きなさい。
解説
元の数にIF関数を足します(参考:【Excel】IF関数の共通部分を外に出す、ある条件のときだけ計算を追加する)。
マイナスの数であることを判定して、TRUEであれば24を足し、FALSEであれば0を足します。
- =A1+IF(A1<0,24,0)
この場合、24以上の数もそのままです。
そこで、MOD関数を挿入します。24で割ったときの余りを求めます。
- =MOD(A1,24)
24で割ったときの余りは、マイナスの場合も含めて0~23の繰り返しになります。特に、-24~-1については、24を加算したのと同じになります。
いっぱんに-X~-1をXで割ったときの余りは、Xを加算したのと同じになります。
この場合、24以上の数は24を引いたのと同じになります。
(2)時間の引き算
問題
セルA1に開始時間、セルA2に終了時間を入力して、引き算をすることによって開始から終了までの時間数を求めた。セルA1の値が、セルA2の値より大きい場合であっても正しく求められるように数式を修正しなさい。
解説
大きい数から小さい数を引くとプラスになりますが、小さい数から大きい数を引くとマイナスになります。しかし、23時から翌朝の7時までの時間はマイナス16時間ではなく、8時間が正しいです。
つまり、マイナスになった場合は24を加算すればよいです。
MOD関数を挿入します。24で割ったときの余りを求めます。
- =MOD(A2-A1,24)
2.足し算を修正する
問題
セルA1に開始時間、セルA2に加算する時間を入力して、足し算をすることによって終了時間を求めた。24時を超える場合であっても正しく求められるように数式を修正しなさい。
解説
23時+7時間は30時ですが、23時の7時間後は午前6時です。
24時間制の場合、時間は0~23の繰り返しです。足し算をして24時を超えるときに、0時に戻すにはMOD関数を使います。
MOD関数を挿入します。
24で割ったときの余りを求めます。
3.月の足し算・月の引き算
問題
A列に1~12の連番を入力した。A列の数値を現在の月として、その3か月後の月を求めなさい。また、3か月前の月を求めなさい。
解説
3か月後なので、3を足します。10月、11月、12月の3か月後がそれぞれ13月、14月、15月になってしまいます。
- =A2+3
月は1から12までの連番ですが、3か月後の月は、その連番が3か月ずれています。12を超えたときに12を引いて、1月、2月、3月にしようとしています。
1から始まる繰り返しにするには、元の数から1を引き、12で割ったときの余りに1を足します。
1から12までの連番をずらすには、3を足してから、その数から1を引いて、12で割ったときの余りに1を足します。
- =MOD(今月+3か月後-1,12)+1
MOD関数を挿入します。
1を引くので、プラス2になります。
12で割った余りに1を足します。これで完成です。
- =MOD(A2+2,12)+1
3か月前なので、3を引きます。
- =A2-3
1月の3か月前は10月です。3か月前も同じように、3を引いてから、その数からさらに1を引いて、12で割ったときの余りに1を足します。
MOD関数を挿入します。
1を引くので、マイナス4になります。
12で割った余りに1を足します。これで完成です。
- =MOD(A2-4,12)+1
4.四半期の求め方
問題
A列に1~12の連番を入力した。4月から始まる年度の場合、4月~6月が第1四半期である。A列の月から四半期を求めなさい。
解説
4月から始まる年度の場合、4月~6月が第1四半期、1月~3月が第4四半期です。
MOD関数を挿入します。開始月である4を引いて、12で割ったときの余りを求めます。開始月である4月が0となり、11までの連番となります。
- =MOD(A2-4,12)
これを、「1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4」に変換するには、INT関数を使います(参考:【Excel】INT関数を使って同じ数を複数個繰り返す数列を作る方法)。3で割って1を足します。これで完成です。
- =INT(MOD(A2-4,12)/3)+1
5.ローテーション
(1)前に1つずらす
問題
A列に1~7の整数をランダムに入力した。A列の数値に1を足しなさい。ただし、7の場合は1に戻すものとする。
解説
1~7の整数に1を加えると2~8になります。
7を8にするのではなく、1にすると、ローテンションで1つずらすことができます。
ここで、7で割ったときの余りを求めます。1~6はそのままで7だけ0になります。
- =MOD(A1,7)
このように、1から始まる連番の最大値を0にするにはMOD関数を使って、最大値で割ったときの余りを求めます。
これに1を足します。これで完成です。
1から始まる番号を1つずつ進め、最大値を1に戻すには、最大値で割った余りに1を足します。
(2)前に3つずらす
問題
A列に1~7の整数をランダムに入力した。A列の数値に3を足しなさい。ただし、5,6,7の場合は1,2,3に戻すものとする。
解説
1~7の整数に3を加えると4~10になります。
5,6,7を8,9,10にするのではなく、1,2,3にすると、ローテンションで3つずらすことができます。
ここで、2をたして、7で割ったときの余りを求めます。1~5はそのままで、5~7が0~2になります。
- =MOD(A1+2,7)
これに1を足します。これで完成です。
- =MOD(A1+2,7)+1
1から始まる番号をローテーションで3個進めるには、2を足して最大値で割った余りに1を足します。いっぱんに、1から始まる番号をローテーションでN個進めるには、N-1を足して最大値で割った余りに1を足します。
(3)後ろに1つずらす
問題
A列に0~6の整数をランダムに入力した。A列の数値に1を引きなさい。ただし、0の場合は6とする。
解説
0~6の整数から1を引くと-1~5になります。
6を-1にするのではなく、6にすると、ローテンションで1つずらすことができます。
ここで、7で割ったときの余りを求めます。0~5はそのままで-1だけ6になります。これで完成です(参考:【Excel】MOD関数の使い方、INT関数との関係、マイナスの場合の余り)。
-1を7で割った余りは6です。このように-1を割って余りを求める計算をすることによって、最小値を最大値に変換することができます。
(4)マイナスを作る
問題
A列に1~7の整数をランダムに入力した。A列の数値に1を引きなさい。ただし、1の場合は7とする。
解説
まず、2を引きます。これによって最小値である1が、-1になります。
マイナスの数を作ることによって、最大値にすることができます。
MOD関数を挿入して、7で割ったときの余りを求めます。これで-1が6になります。
- =MOD(A1-2,7)
これに1を足します。これで完成です。
- =MOD(A1-2,7)+1
1から始まる番号を1つずつ減らし、1を最大値にするには、2を引いて最大値で割った余りに1を足します。
6.最大値を0にする
問題
セルA1の値の1の位を取り出し、10から引いた数を求めなさい。ただし、求めた答えが10の場合は0としなさい。
解説
1の位の数値を取り出すには、MOD関数を使います(参考:MOD関数で小数部分や下位の桁を取り出す、下の位の一致判定)。10で割ります。これを10から引きます。
- =10-MOD(A1,10)
1の位の数を取り出すと、0~9の数になります。これらを10から引くと、10~1になります。1から始まる連番の最大値を0にするには、最大値である10で割った余りを求めます。これによって、0はそのままで1~9を逆順にすることができます。
外側にMOD関数を挿入します。10で割ったときの余りを求めます。
- =MOD(10-MOD(A1,10),10)
さらに、10を10で割ったときの余りは0なので、このように書くこともできます。
- =MOD(-MOD(A1,10),10)
7.ローテーションの入力
問題
セルA1:E1に1~5の数を入力した。次の図のように、2行目以降に縦向きに1~5の順に連番を入力しなさい。
解説
1~5の数字を1つずつずらしながら繰り返し入力しようとしています。1~4については1を足せばよいですが、5は1に戻さなければなりません。
MOD関数を挿入します。5で割ったときの余りを求めると、1~4はそのままで、5が0になります。
1を足します。これで1つずれます。
- =MOD(A1,5)+1
オートフィルをします。これで完成です。
解説は以上です。