本サンプル問題の著作権は日本商工会議所に帰属します。
また、本サンプル問題の無断転載、無断営利利用を厳禁します。本サンプル問題の内容や解答等に関するお問い合わせは、受け付けておりませんので、ご了承ください。

日商プログラミング検定 STANDARD（VBA）サンプル問題
知識科目第１問（知識 4 択：20 問）
１．ユーザが行った操作を記録して同じ操作を自動で行うことができる機能を何というか。
① マクロの記録② アドイン③ デザインモード④ Visual Basic
２．整数値を格納する変数の型を何というか。
① Integer② Byte③ Boolean④ Double
３．文字列を格納する変数の型を何というか。
① String② Date③ Byte④ Boolean
４．変数名として使用することができないものはどれか。
① 1ban② bangou1
③ b1
④ b_1
５．変数名として使用することができないものはどれか。
① No-1② no1③ No1④ No_1

６．積を求める演算子は何か。
①*②-③+④/７．整数値に対する演算で剰余（割り算の余り）を求める演算子は何か。
① Mod
②\③*

④/８．論理式において「または」（論理和）を示す演算子はどれか。
① Or
② And
③ Not
④ Xor
９．論理式において排他的論理和を示す演算子はどれか。
① Xor
② Not
③ Or
④ And
10．論理演算子でないものはどれか。
① Like
② And
③ Or
④ Not
11．配列を宣言するにあたり、必ず記述する記号はどれか。
①()

②[]

③{}

④<>

12．For 文を用いるとき関連するキーワードは何か。
① Next② Loop③ While④ Do

13．Select 文を用いるとき関連するキーワードは何か。
① Case② if③ While④ Loop14．セル”B3"の値を取得する記述はどれか。
① Range("B3").Value② Range("B3").Font③ Range("B3").InteriorColor④ Rnage("B3").BackgroundColor
15．セル”B3"の文字列の色を取得する記述はどれか。
① Rnage("B3").Font.Color② Range("B3").InteriorColor③ Range("B3").BackgroundColor④ Rnage("B3").FormuraR1C116．セル”B3"の背景色を取得する記述はどれか。
① Range("B3").BackgroundColor② Range("B3").InteriorColor③ Rnage("B3").Font.Color④ Rnage("B3").FormuraR1C117．Range("B3").Offset(-1,0)はどのセルを表すか。
① A2
②B3

③C3④

B218．マクロを実行した結果、B5 セルが「=sum(B1:B4)」となるマクロは次のうちどれか。
① Range("B5").FormulaR1C1 = "=sum(R[-4]C:R[-1]C)"② Range("B5").FormulaR1C1 = "=sum(R[4]C:R[1]C)"③ Range("B5").FormulaR1C1 = "=sum(RC[-4]:RC[-1])"④ Range("B5").FormulaR1C1 = "=sum(R[-4]C:R:C[-4])"
19．Range("A:A").Select で選択できるセルは次のうちどれか。
① 列 A 全体
② 行 1 全体
③ A1④ A1 と A2 と B1 と B2

20．アクティブセルが B3 のとき、ActiveCell.Column の値はいくつか。
①2②

3③

1④4第 2 問（穴埋め：2 問）【問題１】
毎日貯金することを考える。１日目は１円、２日目は２円、３日目は４円というように、毎日倍額貯金すると、貯金総額が 100 万円を超えるのは何日目かを求め表示せよ。
【条件】
1. 自然数の範囲で考えるので、変数の型は整数型とする。
【入力】【実行結果】

【アルゴリズム】

開始
S=0
D【1】
=1
N=1

S < 1000000

S

【2】
S+D

「N日目はD円を貯金し、総額S円」を表示【3】＊ ２
D=D
N=N+1「100万円を超えるのは N-1【4】 日目」と表示

終了

以上を実行するプログラムを記述せよ。

Sub M acro()
Dim S, D, N As Integer
S=0
D【１】
=1
N=1
While S < 1000000
S =【２】
S+D
Cells(N + 1, 1).SelectActiveCell.Value = N & " 日目"ActiveCell.Offset(0, 1).Value = D & " 円"ActiveCell.Offset(0, 2).Value = S & " 円"
D =【３】
D* 2
N=N+1Wend
ActiveCell.Offset(1, 0).Value = "100 万円を超えるのは"
ActiveCell.Offset(1, 1).Value =End Sub

N- 1 & " 日目"【４】【１】から【４】に入るべき適当なプログラム片を選択せよ。
【1】 （１）D = 0（２）D = 1（３）D = 2【2】 （１）S = 0（２）S = S + N （３）S = S + D （４）S = S + 1【3】 （１）D = 1（２）D = D * 2 （３）D = D ^ 2 （４）D = D + 1【4】 （１）D（２）（D－1）（３）N（４）D = 3（４）（N－1）

【問題２】
10 種類のフルーツがある。各々何個か購入するとき、合計金額を求め、入金額に対しておつりを計算せよ。
【入力画面】バナナ：１個、なし：２個、かき：3 個、すいか：4 個、もも：5 個、ぶどう：6 個、いちじく：7 個を購入する例を示す。
＜10 種類のフルーツ＞バナナ、みかん、なし、メロン、かき、すいか、キウイ、もも、ぶどう、いちじく【実行結果】

【アルゴリズム】

開始

入金額と購入数量を表から入力

a=0i=0Falsei < 10True

支払総額とおつりを表示

終了

m に i を用いて、フルーツの購入数量を代入

m <> 0False

True
フルーツの単価と数量をかけ、合計金額を変数c に代入

変数a に c の値を追加

i = i + 1

以上を実行するプログラムを記述せよ。

Sub M acro()
Dim i, m , a, c As Integer
Dim N(10) As String
Dim P(10) As Integer
a=0For i = 0 To 9N(i) = Cells(2【１】+ i, 1).Value
P(i) = Cells(2 + i, 2).Value
Next
For i = 0 To 9m = Cells(2 【２】+ i, 3).Value
If m <> 0 Then a = a + P(i)* m【３】
Nextc = Cells(13, 2).Value
Cells(14, 1).Value = " 支払総額"
Cells(14, 2).Value = aCells(15, 1).Value = " おつり"
Cells(15, 2).Value = c - a 【４】End Sub【１】から【４】に入るべき適当なプログラム片を選択せよ。
【1】 （１）Cells(i+1,1).Value（２）Cells(i+2,1).Value（３）Cells(1,i+1).Value（４）Cells(1,i+2).Value【2】 （１）Cells(i+1,3).Value （２）Cells(i+2,3).Value（３）Cells(3,i+1).Value（４）Cells(3,i+2).Value【3】 （１）a = a + P(i) * m （２）a = a + P(i+2) * m（３）m = m + P(i)*a（４）m = m + P(i+2)*a【4】 （１）a – c（４）m - a（２）c – a（３）a - m

第 3 問（読解：1 問）【問題】
以下のプログラムの説明で最も適切なものを選択せよ。
【プログラム】

Sub M acro()
Dim n, i, cnt As Integern = 123456
cnt = 1
For i = 2 To 352
While n M od i = 0n=n/i
Cells(1, cnt).Value = iCells(1, cnt+1).Value = "* "cnt = cnt + 2
Wend
Next
Cells(1, cnt).Value = nEnd Sub【選択肢】【１】 123456 は、素数かどうかを判定し結果を表示する。
【２】 123456 は、２の累乗かどうかを判定し結果を表示する。
【３】 123456 を素因数分解したときの因数を表示する。
【４】 123456 の約数を求め表示する。

実技科目
【問題１】
２から 100 までの約数を求め、シート上に表示しなさい。
【条件】
1. 自然数の範囲で考えるので、変数の型は整数型とする。
2. 以下の様に表示する（抜粋）。

【アルゴリズム】

開始【１】の一部
N=2

N【１】の一部<= 100
False
True「Nの約数は」を表示する。

N【１】の一部= N +1cnt = 1【２】の一部
M = 2【２】の一部
M <= N

False

True

N %【３】M = 0False

True

N 行 cnt 列のセルに M を表示する。
cnt = cnt + 1

M = M + 1
【２】の一部終了

以上を実行するプログラムを記述せよ。
【１】から【３】に入る適当なプログラム片を入力せよ。

Sub M acro()
Dim N, M , cnt As Integer
For N = 2 【１】To 100Cells(N, 1).Value = N & " の約数は"cnt = 1For M = 2【２】To N
If N M【３】od M = 0 ThenCells(N, 1).SelectActiveCell.Offset(0, cnt).Value = M
cnt = cnt + 1
End IfNext M
Next NEnd Sub

【問題２】
３辺a, b, c（c を斜辺とする）の直角三角形の成立条件は、𝑎2 + 𝑏2 = 𝑐 2である。各辺の長さは整数値と仮定し、さらに３～N（N=100）までの範囲の値をとるものとする。
条件が成立する直角三角形の辺の組を求めよ（a, b の値を交換した直角三角形は同じとする）。

【条件】
1. for 文を 3 重ループにし、a, b, c を総当たりで調べる。
2. a ≤ b ≤ c と仮定する。
3. 自然数の範囲で考えるので、変数の型は整数型とする。
【入力】【実行結果】

【アルゴリズム】

開始
a=3
N = 100
cnt = 0False

a <= Na = a + 1
True

終了

b ＝ a【１】b <= Nb = b + 1

False

True

c = a【２】c = c + 1
False

c <= NTrue【３】

a*a + b*b == c*c

True
答の一つ。a, b,c を表示

False以上を実行するプログラムを記述せよ。
【１】から【３】に入る適当なプログラム片を入力せよ。

Sub M acro()
Dim a, b, c, cnt, N As Integer
N = 100
cnt = 0For a = 3 To N
For b = 【１】aTo N
For c = 【２】aTo NIf
a* a+b * b = c * c Then【３】
cnt = cnt + 1
Cells(cnt + 1, 1).SelectActiveCell.Offset(0, 0).Value = a
ActiveCell.Offset(0, 1).Value = b
ActiveCell.Offset(0, 2).Value = c
End If
Next
Next
Next
Cells(cnt + 2, 1).SelectActiveCell.Offset(0, 0).Value = " 個数"ActiveCell.Offset(0, 1).Value = cnt
End Sub【問題３】
２０人の学生の英語の試験の点が以下のようであった。

氏名

英語赤井64

安藤82

青山98

有吉76

浅井83

浅野63

浅岡73

千葉9

江口88

遠藤94

藤井39

藤木45

藤原21

福永58

船橋99

古川17

二村82

花井38

原田88

橋本100

英語の試験の点のヒストグラムを作ることを考える。配列 a に英語の試験の点をあらかじめ格納し、配列 hに度数を格納した後、＊を用いて度数分布表を表示しなさい。ヒストグラムとは、統計で度数分布を示すグラフの一つである。ここでは、横軸に度数をとり、縦軸に階級をとる。
【実行結果】（抜粋）

【アルゴリズム】

開始
配列a に英語の試験の点を格納

配列h の初期化

i=0
N = 20
Falsei<N
True【１】
r = a[i]/10i=i+1h(【2】r) = h(【2】r) +1

i=0
False

i <= 10
True

階級の表示

終了

改行 の表示j=1
False

j <【３】
h[i]
True

* の表示

j=j+1

以上を実行するプログラムを記述せよ。
【１】から【３】に入る適当なプログラム片を入力せよ。

Sub M acro()
Dim a As Variant
Dim h(11) As Integer
Dim i, j, r, N As Integer
N = 20a = Array(64, 82, 98, 76, 83, 63, 73, 9, 88, 94, 39, 45, 21, 58, 99, 17, 82, 38, 88, 100)
For i = 0 To 10h(i) = 0
Next i
For i = 0 To N - 1r = Int(a(i)
/ 10)
【１】
h( 【2】r ) = h( 【2】r )+1Next i
For i = 0 To 10
Cells(i + 1, 1).SelectActiveCell.Offset(0, 0).Value = i * 10
For j = 1 To h(i)【３】ActiveCell.Offset( 0, j ).Value = "* "Next jNext iEnd Sub