最近のITパスポートや基本情報技術者試験では、INTやMODなどの関数が出題されることが多くなりました。プラスの数の場合、INTは小数の整数部分、MODは割り算の剰余です。割り算をしたときの答えと余りでもあります。大変便利な関数なのですが、残念なことに、Excelで余りのある割り算を計算する意味が分かっていない人が多いです。
例えば、12345を100で割ると商の整数部は123、余りは45となります。INTとMODを使って12345を123と45に分けることができます。「INTを使うと右側の45が消えて、MODを使うと左側の123が消える」と解釈することもできます。このように、10の累乗(10、100、1000・・・)で割り算をすると、数値の一部分だけを取り出すことができます。
そこで、ITパスポート試験とその前身の初級シスアド午前試験の過去問のなかから、MOD、INT、INDEX、ROUNDUPなどの関数の問題を出題します。基本情報技術者試験でも何回も出題される重要分野ですから必ず習得しましょう。
- 絶対暗記!かけ算や割り算の計算はノーヒントで解けるように練習せよ
- 関数の基本SUM・IF・COUNTIFが使えるようになってから受験してほしい
- INTやMOD関数を用いて数値の一部を取り出す整数問題と関数の過去問
- 丸め誤差、循環参照、並べ替え、グラフ、マクロなど表計算過去問
目次
- 0.ITパスポート関連書籍について
- 1.下2桁
- 2.各位の数
- 3.年月日
- 4.大分類・中分類・小分類
- 5.金種
- 6.N進数
- 7.四捨五入、五捨六入、五捨五超入
- 8.IFとINT
- 9.最大値を0にする
- 10.行番号の剰余
- 11.CSV
- 12.INDEX(表引き)
- 13.ROUNDUP(切り上げ)
- 14.DATE
0.ITパスポート関連書籍について
ITパスポート試験は入門レベルの情報処理の国家試験で、たくさんの対策テキストや問題集が販売されています。試験を受けなくてもテキストを読むだけで情報処理の基本が身に付きます。
1.下2桁
問題
A列の数値を下2桁が昇順となるように並べ替えなさい。
出典
平成15春初級シスアド問25、平成9春初級シスアド問41改題
解説
いっぱんに下位X桁の数値は、10のX乗で割った余りです。下2桁は100で割った余りです。
これでB列の昇順で並べ替えます。
2.各位の数
問題
社員コード中のチェックディジットを検算する。社員コードは3桁の整数値で最下位の1桁をチェックディジットとして利用しており、上位2桁の各桁の数を加算した値の1の位と同じ値が設定されている。社員コードからチェックディジットを算出する計算式を入力しなさい。
出典
平成22秋ITパスポート問61改題
解説
各位の数を求めるとき、最上位の数はINT関数、途中の位はMOD(INT(),10)、最下位の数はMOD関数を使います。これは暗記しましょう。
100の位は100で割ればよいのでINT(X/100)です。
10の位は10で割って上2桁を求めた後で、10で割った余りを求めたらよいのでMOD(INT(X/10),10)です。
100の位と10の位を加算します。
- =INT(A2/100)+MOD(INT(A2/10),10)
この値の1の位(最下位)はMODを使います。
- =MOD(INT(A2/100)+MOD(INT(A2/10),10),10)
3.年月日
問題
西暦年月日を8桁の数で表すことがある。年、月、日をそれぞれ求めなさい。
出典
平成14春初級シスアド問25、平成11秋初級シスアド問36改題
解説
上の数はINT、途中はMOD(INT())、下の数はMODです。まず、年は10000で割ればよいです。
月は、100で割って日の部分を消してから、下2桁(100で割った余り)を求めます。
- =MOD(INT(A2/100),100)
日は下2桁です。
別解
月は、10000で割った余りで年の部分を消してから、100で割る方法もあります。
- =INT(MOD(A2,10000)/100)
4.大分類・中分類・小分類
問題
商品コードが6桁の数値として入力されている。商品コードは左から、大分類・中分類・小分類のコードが2桁ずつで構成されている。それぞれ10以上70以下の数値になっているかを検査したい。セルE1~E4を適宜利用して、範囲内であれば〇、範囲外であれば×としなさい。
出典
平成17秋初級シスアド問25、平成14秋初級シスアド問27、平成11秋初級シスアド問38改題
解説
まずは、大分類・中分類・小分類のコードを求めてみましょう。大分類はINTです。
中分類はMOD(INT)またはINT(MOD)です。
- =MOD(INT(A5/$E$2),$E$2)
- =INT(MOD(A5,$E$1)/$E$2)
小分類はMODです。
10以上70以下は、IF(AND(X>=10,X<=70),"〇","×")です。これに、大分類・中分類・小分類の式を入れます。
- =IF(AND(INT(A5/$E$1)>=$E$3,INT(A5/$E$1)<=$E$4),"〇","×")
- =IF(AND(MOD(INT(A5/$E$2),$E$2)>=$E$3,MOD(INT(A5/$E$2),$E$2)<=$E$4),"〇","×")
- =IF(AND(MOD(A5,$E$2)>=$E$3,MOD(A5,$E$2)<=$E$4),"〇","×")
ちなみに、実際の試験問題は「IF(整数部(A5/$E$1)>=$E$3,IF(整数部(A5/$E$1)<=$E$4,"〇","×"),"×")は何を検査しているか」といった問題でしたが、整数部(A5/$E$1)が大分類なので「大分類が10~70であるかどうかの検査」と答えられます。
5.金種
問題
2000円札を除く紙幣と硬貨でセルB1の金額を支払うときの枚数を求めなさい。
出典
平成18春初級シスアド問25、平成15秋初級シスアド問22改題
解説
金種のように区切りごとに数量を求めるときはINT(MOD())の形になります。これも暗記しましょう。まず、1万円札は1万で割ります。
次の5000円札の枚数は、1万円の余りを求めることによって、1万円以上の位を消し、それを5000で割ります。
- =INT(MOD($B$1,A2)/A3)
6.N進数
問題
(1)12345秒は3時間25分45秒である。このようにX秒をH時間M分S秒に変換しなさい。
(2)2つの記号〇と×をあわせて5つ使って1列に並べる方法をすべて書き出したところ32通り見つかった。この表のセルB2に数式を入力して、表を完成させなさい。
出典
オリジナル問題
解説
(1)60進数
60進数の場合も、上位の数はINT、途中はMOD(INT())、下位の数はMODです。まず、3600で割って切り捨てると時間になります。1時間未満の端数が消えて、3時間だけになります。
- =INT(A2/3600)
60で割って切り捨てると分単位になります。この時点で1分未満の端数(45秒の部分)が消えます。そして、60で割った余りを求めることで分だけになります。
- =MOD(INT(A2/60),60)
【別解】3600で割った余りを求めると3時間の部分が消えて、25分45秒だけになります。これを60で割って1分未満の端数(45秒の部分)を消すという方法もあります。
秒は60で割った余りです。
(2)2進数
まずは、オーソドックスな方法で表を作ってみましょう。B列は奇数が〇、偶数が×になっています。MODを使えばよいです。
- =IF(MOD(A2,2)=1,"〇","×")
F列は0~15が×、16~31が〇と考えられます。INTを使えばよいです。
- =IF(INT(A2/16)=1,"〇","×")
C~E列はINTとMODを両方使うパターンです。C列は2個ずつ、D列は4個ずつ、E列は8個ずつ×と○が並んでいることを考えると、それぞれ2,4,8で割っていることが分かります。2,4,8で割って、2で割った余りを求めます。
- =IF(MOD(INT(A2/2),2)=1,"〇","×")
- =IF(MOD(INT(A2/4),2)=1,"〇","×")
- =IF(MOD(INT(A2/8),2)=1,"〇","×")
ところで、2の1乗、2乗、3乗と考えれば1行目の数を利用することができます。複合参照にします。
- =IF(MOD(INT($A2/2^C$1),2)=1,"〇","×")
さらに、2の0乗=1、2の4乗=16なので、この数式はB列、F列でも利用することができます。したがって、はじめからセルB2にこの数式を入力して複写すればよいです。
7.四捨五入、五捨六入、五捨五超入
問題
INT関数を用いて、10000未満を四捨五入、五捨六入、五捨五超入しなさい。
出典
平成10春初級シスアド問29改題(五捨六入が出題された)
解説
四捨五入、五捨六入、五捨五超入とは次のような意味です。五捨六入は労働保険で、五捨五超入は医療事務などで使われます。
- 四捨五入・・・4以下を切り捨て、5以上切り上げ
- 五捨六入・・・5以下を切り捨て、6以上切り上げ
- 五捨五超入・・・四捨五入で、ちょうど5のときは切り捨て
INT関数を用いて、四捨五入、五捨六入、五捨五超入するには次のような式を使います。
- 四捨五入・・・INT(X+0.5)
- 五捨六入・・・INT(X+0.4)
- 五捨五超入・・・-INT(0.5-X)
1000の位を四捨五入するにはROUND関数を使えばよいですが、あえてINT関数を使う場合は、INT(X/10000+0.5)*10000となります。
1000の位を五捨六入するには、INT(X/10000+0.4)*10000となります。6以上で切り上げになります。
1000の位を五捨五超入するには、-INT(0.5-X/10000)*10000となります。ちょうど5000のときだけ切り捨てになり。5001以上は切り上げになります。
8.IFとINT
問題
買い物金額に応じたポイント数を計算する。買い物金額が1000円以下では買い物金額の1%、買い物金額が1000円を超え3000以下では買い物金額の2%、買い物金額が3000円を超える場合は買い物金額の3%のポイントを付与する。ポイント数の小数点以下は切り捨てるものとするとき、セルB2に数式を入力しなさい。
出典
平成28春ITパスポート問80改題
解説
IF(X>3000,3%,IF(X>1000,2%,1%))の形です。不等号の向き、イコールの有無、条件の順番に気を付けましょう。
- =IF(A2>3000,INT(A2*3%),IF(A2>1000,INT(A2*2%),INT(A2*1%)))
- =IF(A2<=1000,INT(A2*1%),IF(A2<=3000,INT(A2*2%),INT(A2*3%)))
別解
INT関数の中にIF文を入れてもいいです。
- =INT(IF(A2>3000,A2*3%,IF(A2>1000,A2*2%,A2*1%)))
さらに、A2をIF文の外に出すことも可能です。
- =INT(A2*IF(A2>3000,3%,IF(A2>1000,2%,1%)))
9.最大値を0にする
問題
JANコードやISBNコードは、0~9の数字を使った13桁の記号で構成され、左から桁を数える。13桁目はチェックディジットと呼ばれ、1~12桁目の数字を使って計算によって求めることになっている。奇数桁に1、偶数桁に3をかけて足した総和を10で割った余りを求め、10からその余りを引いた値がチェックディジットである。ただし、この値が10になった場合は0とする。B2:M2に12桁のコードを入れた場合、セルN2に13桁目を求めなさい。
出典と参考記事
平成24春ITパスポート中問D問99・100改題
- Excelでバーコード(JANコード)を使うための基礎知識の総まとめ【勉強会資料】 - わえなび ワード&エクセル問題集
-
Excelの数式で簡単にできる得点調整の方法と傾斜配点の計算方法(正しい得点操作の方法) - わえなび ワード&エクセル問題集
解説
まず、各桁にウェイトを掛けます。
合計を10で割った余りを求めます。
- =MOD(SUM(B4:M4),10)
10で割った余りは必ず0~9になりますから、それを10から引くと10~1になります。1~9はそのままにして、10だけを0にするには10で割った余りを求めます。このように、一番大きい数を0にするにはMODを使います。
10.行番号の剰余
問題
支店ごとに売上高と対前年比が並んでいる支店別売上一覧表を作成し、セルD7に「=SUM(D1:D6)」と入力した。行番号を返す関数ROW()を用いて、セルD7に全支店の売上合計が表示されるようにしなさい。
出典
平成16秋初級シスアド問26、平成12秋初級シスアド問39改題
解説
通常はSUMIF関数を使いますが、SUMを使う場合はD列に売上高を転記しなければなりません。
奇数行だけ転記して、偶数行を0にすればよいです。行番号ROW()を2で割った余りを求めます。余りが1であれば奇数行なので売上高を参照して、偶数行の場合は0にします。
- =IF(MOD(ROW(),2)=1,C1,0)
11.CSV
問題
レコード間の区切りは改行コード[CR]を使用するものとする。
(1)表のセルA1~C2に値が入力されている。表の値をCSV形式で出力するとどのようなデータが出力されるか述べなさい。
(2)CSV形式のデータ「2,2,4[CR]1,3,4[CR]2,1,1[CR]」を表計算ソフトに取り込んで、セルD1~D3に次の計算式を入力した場合、セルD3に表示される数値を答えなさい。
出典と参考記事
(1)平成23春期特別ITパスポート問73改題
(2)平成16秋初級シスアド問25改題
解説
(1)レコード
CSV形式で出力すると、文字コードが連続したテキストデータでになります。各フィールドはカンマで区切り、横方向の1行を1件のレコードとして、そのレコードの区切りが[CR]となります。したがって、「月,1月,2月[CR]売上高,500,600[CR]」となります。
(2)CSVの取り込み
CSV形式のデータをExcelに取り込むと、データは第1行の左端のセルから順に格納され、[CR]で次の行の左端のセルに移ります。したがって、A1+C3=3、B1+B3=3なので、D1+D2=6となります。
12.INDEX(表引き)
問題
6つの項目についてそれぞれ5段階評価(1~5)をする回答形式のアンケートを実施して、15件の回答を得た。
特定の質問項目の評価が低い回答をもとにどのような傾向があるのかを分析するため、指定した質問項目の評価が2以下のアンケートだけを抽出しようとしている。セルI20に質問項目の項目番号を入力すると、その質問項目の評価が2以下だったアンケート内容を抽出して、アンケート抽出表の同じ行に複写する。抽出対象でない場合は空白にする。セルH4に数式を入力して、表を完成させなさい。
出典
平成27秋ITパスポート中問A問86改題
解説
上から何行目、左から何列目のデータを取得するにはINDEX(表引き)を使います。項目番号が2の場合、左から2列目のデータを取得して2以下かどうかを判定すればよいです。行番号が1、列番号が2(セルI20)です。
- INDEX(A4:F4,1,I20)
このとき範囲は列固定の複合参照、項目番号は絶対参照です。
- =IF(INDEX($A4:$F4,1,$I$20)<=2,A4,"")
13.ROUNDUP(切り上げ)
問題
電話受付センタにおける時間別の電話受付件数から、時間別のオペレータ数を求めようとしている。注文の受付に掛かる時間を1件当たり平均8分とするとき、計算上、電話を受け付けるのに最低限必要な時間別のオペレータ要員数を求めなさい。
出典
平成26春ITパスポート問86改題
解説
例えば、1時間に82件の電話がかかってきた場合、1件につき8分間会話をすると82*8=656分かかります。しかし、1時間は60分しかないのでオペレータ1人で656分の会話をすることは不可能です。少なくとも一人当たりの時間を60分以内に抑えるようにオペレータを配置しなければなりません。したがって、受付件数*8を60分で割って人数を求めますが、小数部分は切り上げないと、一人当たり60分以内になりません。いっぱんに最低限必要な数を求める場合は切り上げ、上限の数を求める場合は切り捨てて整数にします。
*補足* 実際には、電話が同時に掛かってくることもあるので待ち時間を減らすためにさらにオペレータを増員しなければなりません。
14.DATE
問題
DATE(y,m,d)は1900年1月1日を1日目としたときの、y年m月d日までの経過日数を算出する関数である。この関数を用いて、あるプロジェクトの作業日数を表計算ソフトで計算したい。A2~C2に作業開始年月日、D2~F2に作業終了年月日を入力した時の作業日数を求めなさい。
出典と参考記事
平成17春初級シスアド問23、平成14秋初級シスアド問25、平成8春初級シスアド問25改題
解説
Excelのシリアル値は基準日である1900年1月1日からの経過日数です。これを利用することで、日付を足したり引いたりすることができます。開始日も終了日も基準日からの日数なので引き算すると基準日とは関係なく、その期間の日数を求めることができます。
しかし、単に引き算をしてしまうと開始日が含まれなくなりますから、1を加算しなければなりません。
開始日~終了日までの日数は「終了日-開始日+1」です。
*補足*正確に言うと、Excelの日付のシリアル値は午前0時を基準とするので、終了日をDATE(2005,10,25)とすると、2005/10/25の午前0時を表します。最終日2005/10/25の24時までを作業期間とするために1日を加算します。
解説は以上です。
試験問題の著作権はIPA独立行政法人情報処理推進機構にあります。この解説は公式のものではありません。
- 絶対暗記!かけ算や割り算の計算はノーヒントで解けるように練習せよ
- 関数の基本SUM・IF・COUNTIFが使えるようになってから受験してほしい
- INTやMOD関数を用いて数値の一部を取り出す整数問題と関数の過去問
- 丸め誤差、循環参照、並べ替え、グラフ、マクロなど表計算過去問