日商プログラミング検定 STANDARD VBA サンプル問題の第2問を解いてみた
前回、
に続いて日商プログラミング検定STANDARD VBAのサンプル問題を解いています。今回はまったりした内容です。
第2問
問題1 毎日貯金することを考える。1日目は1円、2日目は2円、3日目は4円というように、毎日倍額貯金すると、貯金総額が 100 万円を超えるのは何日目かを求め表示せよ。
答 n日目の貯金総額は2^n -1円。2^10=1024だから、2^20≒10^6で、2^19は10^6よりは小さい。よって貯金総額が100万円を(初めて)超えるのは20日目。
高校数学がある程度できる人なら上記のように手計算で求められるでしょう(笑)
またExcelで2^nの値を計算してSUM関数で貯金総額を求めてもいいと思います(笑)
これはVBAの問題でしたね。真面目にVBAで解こうと思います。
【1】はDの初期化についてですね。DはN日目の貯金額なのでN=1のときD=1だから(2)が答えですね。
【2】WhileとWendの間にあるものは「入力するセルの選択」 「N日目、貯金額、貯金総額の入力」 「日数を1つ足す」で、足りないものは「貯金総額の計算」 「貯金額の計算」です。【2】に当てはまるのは(2)S=S+Nですね。N-1日目の貯金総額にN日目の貯金額を加えてN日目の貯金総額にしています。
【3】 これは【2】の残りです。倍額で貯金するから(2)D=D*2が正解です。
【4】 貯金総額が100万円を超えるのは何日目かを答える問題。日数はNなので(3)か(4)が答え。貯金総額が100万円を超えてもN=N+1の計算でNが1つ増えてしまうので1つ引いて元に戻さなくてはいけません。よって答えは(4) (N-1)です。
※このくらいの計算では特に問題ありませんが、Selectは時間がかかってしまうので使わないほうが賢明です。
問題2 10 種類のフルーツがある。各々何個か購入するとき、合計金額を求め、入金額に対しておつりを計算せよ。
【1】 P(i)=cells(2+i,2).value は各フルーツの単価を取得しています。それと対になることや購入総額を求めたいことから【1】は各フルーツの購入数量を取得すると考えます。よってN(i)=cells(2+i,3).value が答えなのでしょうが選択肢にありません(笑) またN(i)はこれ以降使わないので【1】は何を答えても正解となってしまいます。
【2】フローチャートより、フルーツの数量を取得すればいいことがわかります。【1】と同じように考えて答えは
(2)Cells(i+2,3).Value とわかります。
【3】購入金額の計算式ですね。単価がP(i),個数がmでaが購入金額だから答えは
(1)a=a+P(i)*m と分かります。
End If を書かなくていいことが勉強になりました。
【4】おつりは「支払い総額(c)-購入金額(a)」だから答えは
(2)c-a です。
問題2も問題1と同じでVBA使わずに普通にExcelの関数で計算した方が良さそうという気がしますが、これは関数でできることをあえてVBAでやってみる練習のような意図があるのでしょう。
第3問に続きます。