平成27年度春期基本情報技術者_表計算のマクロをExcelVBAで再現する
目次
1.出典
2.問題で使用するExcelシート「学習進捗管理」の簡単な作り方
3.問題文の要旨
4.問題文(疑似言語)
5.解答群(疑似言語)
6.問題文(VBA翻訳)
7.解答群(VBA翻訳)
8.正解
9.正解を入れたVBA完全版 ※動作確認済み
10.バックナンバー
11.ExcelVBA講座ご紹介
1.出典
経済産業省国家試験(IPA情報処理推進機構)
平成27年度春期 基本情報技術者試験 午後試験 選択問題 問13表計算設問3[解答欄e~f]
なお、試験問題及び正解の著作権はIPA情報処理推進機構に帰属します。
2.問題で使用するExcelシート「学習進捗管理」の簡単な作り方
3.問題文の要旨
単元は100~1200の100刻みである。項目のIDは、属する単元のIDの下2桁を01から始まる連番にしたものである。セルO2に学習を開始したい項目IDを入力する。その項目が学習開始可能で、かつ学習開始日が空値の場合に学習開始日(本日)を設定する。さらに、単元の学習開始日が空値の場合には単元の学習開始日にも同じ日(本日)を設定する。マクロを用いて本日の日付を入力したい。ただし、本日()はこの関数を実行した日のシリアル値を整数値で返す。
4.問題文(疑似言語)
ループもないようなアルゴリズムの問題は論外です。
[マクロ:StartLearning]
〇マクロ:StartLearning
〇数値型:ItemRow, UnitRow
・ItemRow ← 照合一致(O2, I2~I53, 0)
・UnitRow ← 照合一致(切り捨て(O2, -2), A2~A13, 0)
▲ 論理積([ 解答欄e ])
|・相対(L1, ItemRow, 0) ← 本日()
|▲ 相対(E1, UnitRow, 0) = null
||・相対(E1, UnitRow, 0) ← [ 解答欄f ]
|▼
▼
5.解答群(疑似言語)
eに関する解答群
ア 表引き(K2~K53, ItemRow, 1) = '可', 表引き(E2~E53, UnitRow, 1) = null
イ 表引き(K2~K53, ItemRow, 1) = '可', 表引き(E2~E53, UnitRow, 1) <> null
ウ 表引き(K2~K53, ItemRow, 1) = '可', 表引き(L2~L53, ItemRow, 1) = null
エ 表引き(K2~K53, ItemRow, 1) = '可', 表引き(L2~L53, ItemRow, 1) <> null
オ 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(E2~E53, UnitRow, 1) = null
カ 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(E2~E53, UnitRow, 1) <> null
キ 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(L2~L53, ItemRow, 1) = null
ク 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(L2~L53, ItemRow, 1) <> null
fに関する解答群
ア 表引き(E2~E53, ItemRow, 1)
イ 表引き(F2~F53, ItemRow, 1)
ウ 表引き(F2~F53, UnitRow, 1)
エ 表引き(L2~L53, ItemRow, 1)
オ 表引き(L2~L53, UnitRow, 1)
カ 表引き(M2~M53, ItemRow, 1)
キ 表引き(M2~M53, UnitRow, 1)
6.問題文(VBA翻訳)
Sub StartLearning()
Dim ItemRow As Integer, UnitRow As Integer
ItemRow = WorksheetFunction.Match(Range("O2"), Range("I2:I53"), 0)
UnitRow = WorksheetFunction.Match(WorksheetFunction.RoundDown(Range("O2"), -2), Range("A2:A13"), 0)
Do While [ 解答欄e ]
Range("L1").Offset(ItemRow, 0) = Date
If Range("E1").Offset(UnitRow, 0) = "" Then
Range("E1").Offset(UnitRow, 0) = [ 解答欄f ]
End If
Loop
End Sub
7.解答群(VBA翻訳)
eに関する解答群
ア WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "可" And WorksheetFunction.Index(Range("E2:E53"), UnitRow, 1) = ""
イ WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "可" And WorksheetFunction.Index(Range("E2:E53"), UnitRow, 1) <> ""
ウ WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "可" And WorksheetFunction.Index(Range("L2:L53"), ItemRow, 1) = ""
エ WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "可" And WorksheetFunction.Index(Range("L2:L53,") ItemRow, 1) <> ""
オ WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "不可" And WorksheetFunction.Index(Range("E2:E53"), UnitRow, 1) = ""
カ WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "不可" And WorksheetFunction.Index(Range("E2:E53"), UnitRow, 1) <> ""
キ WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "不可" And WorksheetFunction.Index(Range("L2:L53"), ItemRow, 1) = ""
ク WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "不可" And WorksheetFunction.Index(Range("L2:L53"), ItemRow, 1) <> ""
fに関する解答群
ア WorksheetFunction.Index(Range("E2:E53"), ItemRow, 1)
イ WorksheetFunction.Index(Range("F2:F53"), ItemRow, 1)
ウ WorksheetFunction.Index(Range("F2:F53"), UnitRow, 1)
エ WorksheetFunction.Index(Range("L2:L53"), ItemRow, 1)
オ WorksheetFunction.Index(Range("L2:L53"), UnitRow, 1)
カ WorksheetFunction.Index(Range("M2:M53"), ItemRow, 1)
キ WorksheetFunction.Index(Range("M2:M53"), UnitRow, 1)
8.正解
e ウ
「その項目が学習可能で空値である」=「I~Mで'可' And null」で答えが出る。
f エ
単元の学習開始日がなければ、本日()を入れたらいいので表引きを使う必要もない。あえて使うのであれば相対(L1, ItemRow, 0)と同じ意味の表引き(L2~L53, ItemRow, 1)しかない。
9.正解を入れたVBA完全版 ※動作確認済み
Sub StartLearning()
Dim ItemRow As Integer, UnitRow As Integer
ItemRow = WorksheetFunction.Match(Range("O2"), Range("I2:I53"), 0)
UnitRow = WorksheetFunction.Match(WorksheetFunction.RoundDown(Range("O2"), -2), Range("A2:A13"), 0)
Do While WorksheetFunction.Index(Range("K2:K53"), ItemRow, 1) = "可" And WorksheetFunction.Index(Range("L2:L53"), ItemRow, 1) = ""
Range("L1").Offset(ItemRow, 0) = Date
If Range("E1").Offset(UnitRow, 0) = "" Then
Range("E1").Offset(UnitRow, 0) = WorksheetFunction.Index(Range("L2:L53"), ItemRow, 1)
End If
Loop
End Sub
10.バックナンバー
11.ExcelVBA講座ご紹介
この記事が気に入ったらサポートをしてみませんか?