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

日商プログラミング検定 EXPERT（VBA）サンプル問題
知識科目
第１問（知識 4 択：20 問）

1．実行時エラーが発生してマクロを停止したとき、マクロをリセットするためにクリックするアイコンは、次のうちどれか。最もふさわしいものを選択しなさい。
①②

③

④

2．以下の各要素のうち、プロパティでないものはどれか。次から選びなさい。
ActiveCell.Offset(0, 1).Font.Color = 10
① ActiveCell② Offset1

③ Font④ Color3．シートの状態が図のようなとき、次の文を実行した。実行結果として、もっともふさわしいものはどれか。
Worksheets.Add before:=Worksheets(2)

①②

③

④

4．次の文により指定されるセルは次のうちどれか。最もふさわしいものを選択しなさい。
Cells(2, 3).Offset(0, 1)
① D2
② C3
③ B4
④ C2
5．以下のように宣言された変数 A に代入する文として、最もふさわしいものを選択しなさい。
Dim A As Range① Set A = Range("A1")② A = Range("A1")③ A = 10
④ set A = 102

6．次の文を実行した結果、変数 B が True となるＡの値はどれか。最もふさわしいものを選択しなさい。
B = A > 10 And A < 20
① 15
② 25
③ 5
④ 該当する値は存在しない
7．String 型の変数 s に文字列が格納されているとき、最初の１文字を削除する文は次のうちどれか、もっともふさわしいものを選びなさい。
例）s="ABCD"のとき、実行結果が s="BCD"となる。
① s = Right(s, Len(s) - 1)
② s = Right(s, Len(s))③ s = Left(s, Len(s) - 1)
④ s = Left(s, Len(s))
８．固定長配列の添字の下限に関する説明について、最もふさわしいものを選択しなさい。
① 配列を宣言するとき、任意の整数で指定をすることができる。
② 配列の添字の最低値は０であり、変更することはできない。
③ 配列の添字の最低値は 1 であり、変更することはできない。
④ 配列の添字の最低値は、宣言セクションで任意の整数を指定することができる。
9．Integer 型の配列 data の各要素が下図のようであるとき、下の文を実行した。実行後の C4 セルの値は次のうちどれか。選びなさい。
Range(Cells(4, 2), Cells(6, 3)) = data

①B5②

C4③ A2④B13

10．ソートが下図のようであるとき、次のプログラム片において、処理１が実行されるのは、ActiveCell がどのセルであるときか。次から選びなさい。

① A4② A3③ A2④ A1
11．下図のような実験結果がシートに記録されているとき、条件１と条件２の結果を集計する。実験回数は、0回以上の不定である。シートに記載されているすべての結果を集計するプログラムとして、最もふさわしいものを選択しなさい。ただし、各プログラム片において、「集計処理」は正しく記載されているものとする。

①②③4

④12．以下のプログラム片を実行するとき、処理１は何回実行されるか。次から選びなさい。

① 12② 4③ 3
④ 1
13．以下のプログラム片を実行しようとしたところ、実行時エラーとなった。その原因として、最もふさわしいものを選択しなさい。
Dim Data As Collection
Data.Add "A"
Data.Add 10①

変数 Data がインスタンス化されていないから。

②

異なる型を Add しようとしたから。

③ Add を利用できない型だから。
④ Add を 2 回行おうとしたから。
14．クラス A 内に private メンバ変数 x_が宣言されているとき、以下のようなプログラム片が動作するためには、ClassA にはどのような記述が必要か。最もふさわしいものを選択しなさい。
Dim A as ClassA
A = new ClassA
A.X = 10①②5

③④

15．ユーザフォーム上に配置されたテキストボックス TextBox1 がフォーカスされたとき、TextBox1 の背景色を変更するためには、どの記述が必要か。最もふさわしいものを選択しなさい。
①
Private Sub
TextBox1_Enter()②
Private Sub
TextBox1_Change()③
Private Sub
TextBox1_DropButtonClick()④
Private Sub
TextBox1_MouseDown()
16．作成したユーザフォーム UserForm1 を表示するとき、表示中もシートの操作ができるようにするための記述として、最もふさわしいものを選択しなさい。
① UserForm1.Show 0② UserForm1.Show vbModal③ UserForm1.Show④ UserForm1.Show 1
17．以下のプログラム片の説明として誤っているものはどれか。選びなさい。

① Data(Year)により 2018 を取り出すことができる② Data("Year")により 2018 を取り出すことができる
6

③ Data(3)により 2018 を取り出すことができる④ Data.Item("Year")により 2018 を取り出すことができる
18．次のプログラム片を実行したのち、X の値が 2 になるのは次はどれか。選びなさい。
①②③④7

19．下記のプログラム片を実行した結果として、最もふさわしいものを選択しなさい。

①

②③

8

④20．下記のプログラム片は、Function Foo の結果を myRange に受け取る。(A)に入れる最もふさわしいものを選択しなさい。

① set MyRange = Foo② MyRange = Foo③ Foo = MyRange④ Foo(MyRange)

9第 2 問（穴埋め：2 問）【問題１】
河川の水位を上流から下流まで４地点で毎時間同時に計測しており、時刻ごとに４地点のグラフが画像として保存されている。画像のファイル名は時系列に g01.jpg から連番であり、最後は g30.jpg である。画像は Excel フ
ァイルが保存されているフォルダ内の images フォルダに保存されている。

図 1 グラフ画像の保存フォルダ
図 2 に示すユーザフォームを作成し、イメージ領域にグラフを表示、「次へ」ボタンをクリックすると、次の時刻のグラフに切り替える。同様に、「前へ」ボタンをクリックすると、１つ前の時刻のグラフを表示する。最後のグラフが表示されているとき、「次へ」ボタンがクリックされたら、メッセージボックスを表示して、最後の画像であることを知らせる。同様に、最初のグラフが表示されているとき、「前へ」ボタンがクリックされたら、メッセージボックスを表示して、最初の画像であることを知らせる(図 3)。
「次へ」ボタン「前へ」ボタンと同様の機能を持つスクロールバーを配置する。スクロールバーが最も左のときは最初のグラフを表示し、最も右のときは最後のグラフを表示する。スクロールバーのハンドル位置は、表示されているグラフを表す位置でなければならない。つまり、「次へ」ボタンと「前へ」ボタンがクリックされたときも、スクロールバーのハンドル位置を変更する。
「終了」ボタンがクリックされたら、画面を閉じる。

図 2 最初のグラフを表示

10

図 3 メッセージボックスの表示

図 4 最後のグラフを表示

入力画面上の各コントロールのオブジェクト名は図 5 のとおりである。

図 5 コントロールのオブジェクト名
プログラムでは、以下のグローバル変数を利用している。
型変数名

説明IntegerN

最終のグラフ画像の番号

Integer

I

現在表示しているグラフ画像の番号

マクロ VBA では、以下のプロパティが利用できる。
11

型

プロパティ

説明

String

ThisWorkbook.Path

Excel ファイルが保存されているフォルダの絶対パス

マクロ VBA では、以下の関数が利用できる。
型関数の形式と説明

StringFormat(式 , “書式指定”)
式を指定の書式の文字列にする。

12

【アルゴリズム】【プログラム】
Sub Macro()UserForm1.Show
End Sub

Dim N As Integer
Dim I As Integer
Private Sub UserForm_Initialize()
N = 30
Bar_Next.Min = 1
Bar_Next.Max = N

13I = 【１】One_Draw
End Sub
Private Sub Button_Exit_Click()
Unload UserForm1
End Sub
Private Sub Button_Next_Click()If I < N Then
I = 【２】
Bar_Next.Value = I
One_DrawElse
MsgBox "最後の画像です", vbOKOnly, "メッセージ"
End IfEnd Sub
Private Sub Button_Pre_Click()If I > 1 Then
I = 【３】
Bar_Next.Value = I
One_DrawElse
MsgBox "最初の画像です", vbOKOnly, "メッセージ"
End IfEnd Sub
Private Sub Bar_Next_Change()
I = 【４】
One_Draw
End Sub
Private Sub One_Draw()
Dim Path As String
Dim FileName As String
14

FileName = "\g" + Format(I, "00") + ".jpg"
Path = ThisWorkbook.Path + "\images" + FileName
Image_Graph.Picture = LoadPicture(Path)
End Sub

次の中から、上の空欄【１】～【４】に入る最も適切なものを選びなさい。なお、プログラムでは、データは配列の初期化により与えられる。
【１】

【２】

【３】

【４】

（１） 1（２）0（３） N（４）30（１） I + 1（２）1（３） I - 1（４）

Bar_Next.Value（１） I - 1（２）1（３） I + 1（４）

Bar_Next.Value（１） Bar_Next.Value（２）I+1（３） I - 1（４）3015【問題 2】列車の座席を自動販売機で予約することをシミュレートするプログラムである。予約のルールは以下のとおりである。
(1) 停車駅と座席の座席名は、図１のシートから与えられるものとする。
(2) 図２の予約画面にて、乗車駅番号と降車駅番号を入力し、検索ボタンをクリックすると、購入可能な座席番号を表示する。
(3) 座席番号を入力して予約ボタンをクリックすると、予約が完了する。予約可能な座席がないときは、予約ボタンは無効となりクリックすることはできない。
(4) 乗車駅と降車駅の間が連続して空席であれば予約することができる。
(5) 切符は１回の操作で１枚しか購入することはできない。
なお、問題簡略化のため、車両の情報は省略しており、また、入力に誤りはないものとする。

図 6 駅名・座席名指定の例（ときわ 55 号）

図 7 予約操作画面
例えば、座席番号 4A に上野から土浦まで予約が確定しているとき、土浦から友部までは新に予約をすることができるが、柏から友部までの予約はできない。

図 8 予約例
16

画面に配置されたコントロールの名称は図４のとおりである。

図 9 画面上のコントロールの名称
このプログラムは、以下のクラスから構成されている。
表 1 クラス Seat
フィールド
修飾子
Private型

名称

説明

Objectstation_

各座席について、駅間の予約状況を保持する連想配列(Dictionary)である。駅番号を添字とする。空席の時は false、予約済みの時はtrue とする。列車が停車する駅の数-１個の要素を持つ。

PrivateIntegercol_

シート上の列番号を保持する。

コンストラクタ
修飾子

形式と説明

Publicstation_を初期化する。初期値は全要素 False にする。

プロパティ
修飾子
Public

形式と説明
Let

Col(ByVal i As Integer)
ソート上の列番号を与える

メソッド
修飾子

型

Public形式と説明
Init()
該当するシートの初期化を行う

PublicBoolean

Function isEmpty(Bording As Integer, GetOff As Integer) As Boolean
bording : 乗車駅番号getOff : 降車駅番号
指定の乗車区間の予約が可能かどうかを調べる。乗車区間が空席で予約が可能であれば True を返す。１区間でも予約済みであれば False を返す。

publicReserved(Bording As Integer, GetOff As Integer)17bording : 乗車駅番号
getOff : 降車駅番号
予約区間の stations_を予約済みである True に変更する。同時にシート上の該当するセルを「予約済」とする。
表 2 クラス Train
フィールド
修飾子
Private型

名称

Objectseats_

説明
座席名を添字とする連想配列である。要素として Seat クラスを持つ。

PrivateBooleanfull_

乗車区間が指定されたとき、その区間で満席であれば False を、１席以上の空席があれば True とする。

コンストラクタ
修飾子

形式と説明

Publicseats_を初期化する。seats_は、座席名を添字とする連想配列を形成し、要素として Seat クラスを生成する。

プロパティ
修飾子
Public

形式と説明
Get

SeatsItem(Name As String) As Seatseats_連想配列より、指定の要素を１つ取り出す。

PublicGet

Full() As Boolean
full_を取り出す。True のときは、満席であり、False のときは予約可能である。

メソッド
修飾子型

形式と説明

PublicStringGetState(Bording As Integer, GetOff As Integer)
予約画面上に表示する文字列を形成する。座席名とともに、各座席について指定区間が空席であれば〇、1 区間で予約済であれば、×が文字列内に埋め込まれる。

Publicvoid

Reserved(Bording As Integer, GetOff As Integer, SeatName As String)bording : 乗車駅番号
getOff : 降車駅番号
SeatName：座席名
該当する Seat クラスのオブジェクトに対して、予約を行う。

18

【アルゴリズム】

SEAT クラス19

Train クラス

20

21

【プログラム】
UserForm1 のコード
Dim Tokiwa55 As Train
Private Sub UserForm_Initialize()
Set Tokiwa55 = New Train
End Sub
Private Sub Button_reserve_Click()
Dim Bording As Integer
Dim GetOff As Integer
Dim SeatName As String
Bording = TextBox_bording.Text
GetOff = TextBox_getOff.Text
SeatName = TextBox_seat.Text【１】
End Sub
Private Sub Button_Search_Click()
Dim Bording As Integer
Dim GetOff As Integer
Bording = TextBox_bording.Text
GetOff = TextBox_getOff.Text
Lbl_seat.Caption = Tokiwa55.GetState(Bording, GetOff)
If
【２】
Then
Button_reserve.Enabled = False
Else
Button_reserve.Enabled = TrueEnd If
End Sub
Seat クラス
Private col_ As Integer
Private stations_ As Object
Private Sub class_initialize()
Dim i As Integer
Set stations_ = CreateObject("Scripting.Dictionary")
For i = 1 To 4
stations_.Add Key:=i, Item:=False
Next iEnd Sub
22

Public Property Let Col(ByVal i As Integer)
col_ = i
End Property
Public Sub Init()
Dim i As Integer
For i = 3 To 6Cells(i, col_).Value = ""Next iEnd Sub
Public Function isEmpty(Bording As Integer, GetOff As Integer) As Boolean
Dim i As Integer
isEmpty = True
For i = Bording To GetOff - 1
If stations_.Item(i) ThenisEmpty = False
End IfNext iEnd Function
Public Sub Reserved(Bording As Integer, GetOff As Integer)
Dim i As Integer
For i = Bording To GetOff - 1
stations_.Item(i) = TrueCells(i + 2, col_).Value = "予約済"
Next iEnd Sub
Train クラス
Private seats_ As Object
Private full_ As Boolean
Private Sub class_initialize()
Dim i As Integer
Dim Name As String
Set seats_ = CreateObject("Scripting.Dictionary")
For i = 3 To 623Name = Cells(2, i).Value【３】seats_.Item(Name).Col = iseats_.Item(Name).Init
Next ifull_ = False
End Sub
Public Property Get SeatsItem(Name As String) As Seat
Seats = seats_.Item(Name)
End Property
Public Property Get Full() As Boolean
Full = full_End Property
Public Function GetState(Bording As Integer, GetOff As Integer) As String
Dim Msg As String
full_ = True
Msg = ""For Each Key In seats_Msg = Msg & Key & "："If【４】
Msg = Msg + "〇Then"full_ = FalseElse
Msg = Msg + "×"End If
Next Key
GetState = Msg
End Function
Public Sub Reserved(Bording As Integer, GetOff As Integer, SeatName As String)
Dim i As Integer
seats_.Item(SeatName).Reserved Bording, GetOff
24

End Sub
次の中から、上の空欄【１】～【４】に入る最も適切なものを選びなさい。
【１】（１） Tokiwa55.Reserved Bording, GetOff, SeatName（２） Train.Reserved Bording, GetOff, SeatName（３） Seat.Reserved Bording, GetOff, SeatName（４） Reserved Bording, GetOff, SeatName【２】（１） Tokiwa55.Full（２） Train.Full（３） Full（４） full_【３】（１） seats_.Add Key:=Name, Item:=New Seat（２） seats_.Add New Seat（３） seats_.Add Name（４） seats_.Item(Name)=New Seat

【４】（１） seats_.Item(Key).isEmpty(Bording, GetOff)（２） seats_(Key).isEmpty(Bording, GetOff)（３） Seats(Key).isEmpty(Bording, GetOff)（４） Seats.Item(Key).isEmpty(Bording, GetOff)

25

第 3 問（読解：1 問）【問題】
社会現象をシミュレートするときに欠かすことができないのが乱数である。マクロ VBA は一様乱数を発生する関数が整備されており、これを使って各種乱数を発生することができる。一様乱数を発生する関数は以下のとおりである。
戻り値関数の形式

機能

Single 型

Rnd

0 以上 1 未満の１つの浮動小数点数を得る。

以下は乱数を１つ発生するマクロである。
【プログラム】
Function Macro(a As Integer, b As Single) As Integer
Dim i As Integer
Dim k As Integer
k=0
For i = 1 To ak = k + One(b)Next i
Macro = k
End Function
Function One(b As Single) As Integer
If Rnd < b Then
One = 1Else
One = 0End If
End Function
上のプログラムにより生成される乱数の特徴を表しているのは次のうちどれか。最もふさわしいものを選択しなさい。
【選択肢】
【１】

Macro を何度も呼び出すことで、成功する確率が b である事象を a 回行ったとき、成功する回数の分布が得られる。

【２】

Macro を何度も呼び出しことで、時間 b のあいだに a 回事象が発生する分布が得られる。

【３】

Macro を何度も呼び出すことで、平均 a、分散 b の正規分布が得られる。

【４】

Macro を何度も呼び出すことで、生起率 b で事象が起きるとき、次に起きるまでの時間の分布が得られる。

26

実技科目
【問題１】
スタート地点からゴール地点に移動するにあたり、複数のルートの中から、もっとも短時間での移動が見込まれるルートを選択する。ただし、途中に休憩できる施設があるルートでなければならない。例えば、下表のように５つのルートがある場合、ルートＣを選択する。
表 3 ルート一覧の例
ルート A

ルート B

ルート C

ルート D

ルート E

休憩施設なしありありなしあり

見込み時間

3.8 時間

4.5 時間4.2 時間3.7 時間4.4 時間図 10 ルート例
各地点に関する情報は、図２のようにシートに記録されている。

図 11 ルート例の記録
【流れ図】

27

以下のプログラムの空欄に入る適当なプログラム片を入力してプログラムを完成させなさい。
Sub Macro()
Dim Selected As Range

28

Range("A3").Activate
Do While Not IsEmpty(ActiveCell)
If ActiveCell.Offset(0, 1).Value = "〇" Then
Exit DoEnd If
ActiveCell.Offset(1, 0).Activate
Loop
Set Selected = ActiveCell
Do While Not IsEmpty(ActiveCell)
If ActiveCell.Offset(0, 1).Value = "〇" And【１】

Set Selected = ActiveCell
End If
ActiveCell.Offset(1, 0).Activate
Loop
If Not IsEmpty(Selected) Then
Selected.Offset(0, 3).Value = "〇"End IfEnd Sub

29Then【問題２】
図１のような迷路をスタート地点からゴール地点に最短で移動する経路をすべて列挙するプログラムである。
■は壁であり、進むことができない。また、最短で移動するために、右と下にのみ移動できる。

図 12 迷路の例
図１の例では、①と②はゴールにたどり着くことができるが、③は、途中で行き止まりになってしまい、ゴールにたどり着くことができない。
プログラムでは、壁の構成は、図２のようにシートに与えられる。
「1」は壁であり、「0」は通路である。スタート地点Ｓは、(2,2)、ゴール地点 G は(6,6)である。

図 13 シート上の壁定義
地点を表す x と y の組はクラス Position を利用する。Position の仕様は表１のとおりである。
通過した位置は、Position クラスの配列 route に記録していく。ゴールに到達したときは、配列 route の内容を先頭から順にシート上に出力する。その後、順に戻りながら、次のルートを探す。このとき、route の内容は１つずつ破棄する。行き止まりに阻まれたときも、同様に、route の内容を破棄しながら戻っていく。なお、配列
route は十分な領域が確保されており、領域チェックは省略している。

30

表 4 Position クラス
プロパティ
修飾子型

名称

説明

PublicInteger

X

横方向の添字PublicIntegerY

縦方向の添字修飾子

戻り値

メソッドと説明

PublicBooleanIsGoal()

メソッド

ゴール位置であれば true そうでなければ false を返す。
プログラムで定義し、利用しているサブルーチンの仕様は以下のとおりである。
表 5 定義しているサブルーチン
戻り値関数の形式と機能
GetMaze(Pos As Position)
スタート位置からゴール位置までの経路を表示する。
Pos : 開始位置を指定する。
OutputRoute(Index As Integer)
経路が格納されている配列 route の内容を Index の前までシートに出力する。

BooleanCheckGo(Pos As Position, Direction As Integer)pos の右または下の壁の状態から進めるかどうかを返す。
direction

1 : 右

2 : 下31

【流れ図】

32

以下のプログラムの空欄に入る適当なプログラム片を入力してプログラムを完成させなさい。
Dim Route(30) As Position
Dim Index As Integer
Sub Macro()
Dim Pos As Position
Range("I1").ActivateIndex = 0
Set Pos = New Position
Pos.X = 2Pos.Y = 2
GetMaze Pos
End Sub
Sub GetMaze(Pos As Position)
Dim NextPos As Position
If Pos.IsGoal Then
Set Route(Index) = Pos
OutputRoute (Index + 1)
Exit SubEnd If
Set Route(Index) = Pos
Index = Index + 1
If CheckGo(Pos, 1) Then
Set NextPos = New Posistion
NextPos.X = Pos.X + 1
NextPos.Y = Pos.Y【１】End If
If CheckGo(Pos, 2) Then
Set NextPos = New Position
NextPos.X = Pos.X
NextPos.Y = Pos.Y + 133

【１】End If【２】
End Sub
Sub OutputRoute(Index As Integer)
ActiveCell.Offset(0, 0).Value = "y"ActiveCell.Offset(0, 1).Value = "x"For i = 0 To Index - 1
ActiveCell.Offset(i + 1, 0).Value = Route(i).Y
ActiveCell.Offset(i + 1, 1).Value = Route(i).X
Next i
ActiveCell.Offset(0, 3).Activate
End Sub
Function CheckGo(Pos As Position, Direction As Integer) As Boolean
Dim i As Integer
Dim j As Integer
Select Case Direction
Case 1i = Pos.X + 1j = Pos.Y
Case 2i = Pos.X
j = Pos.Y + 1
Case Elsei = Pos.X
j = Pos.Y
End SelectIf Cells(j, i).Value = 1 Then
CheckGo = False
Else
CheckGo = True
End If
End Function

34

Position クラス
Public X As Integer
Public Y As Integer
Public Function IsGoal() As Boolean
If X = 6 And Y = 6 Then
IsGoal = True
Else
IsGoal = False
End If
End Function35

【問題３】
シャーレの中でバクテリアがどのように増殖するのかをシミュレートするプログラムである。シャーレを微小な空間に分け、その小さな一つひとつの空間にバクテリアが最大１匹存在できるものとする。図１では初期状態として、６匹のバクテリアが存在している。

図 14 微小空間にいるバクテリア
バクテリアは、環境により次のように変化する。
① バクテリアは、図２に示す近傍８個のセルのうち２個または３個のセルにバクテリアが存在すれば、生き続けられる。しかし、２個未満のときは、寂しくて死んでしまう。また、４個以上の時は、過密すぎて死んでしまう。
② バクテリアが存在しないセルでは、図３に示す近傍８個のセルのうち３個のセルにバクテリアが要れば、分裂により新たに誕生することができる。

図 15 周りのバクテリアが少なくても多くても死んでしまう

図 16 近傍が３匹であれば赤ちゃん誕生
以上のルールに従って、時間が進んだとき、バクテリアがどのように変化しているかをシミュレートする。ただし、領域の外側にはバクテリアは生存せず、生誕することもできないものとする。
プログラムでは、13×13 の領域に分けており、定数 TATE と YOKO で定義している。バクテリアの初期状態
は、Excel シート上で与える。黒く塗りつぶしたセルにバクテリアが生存していることを示している。この様子を図４に示す。

36

図 17 Excel シートに与えられた初期状態
微小空間の管理はクラス World で行う。World 内の２次元配列 UniCell に各微小空間のバクテリアの状態を記録しており、バクテリアが生きている状態を true、いない状態を false とする。
バクテリアの状態を１２回更新したときのバクテリアの状態を Excel シート上に表示する。World クラスの仕様は表１のとおりである。
表 6 World クラス
フィールド型

修飾子

名称

説明

privateint

TATE

縦方向の要素数

privateint

YOKO

横方向の要素数

privateBoolean[][]UniCell

バクテリアの状態を記録する配列

コンストラクタと説明
Private Sub class_initialize()
TATE , YOKO を指定する。
メソッド
修飾子

型

メソッドと説明

Publicvoid

GetCell()
Excel シートから初期状態を配列 UniCell に取り込む。

Publicvoid

SetCell()
UniCell の状態を Excel シート上に表にする。

PublicvoidsetNext()
バクテリアの状態を１回更新する。配列 cell が更新される。

37【流れ図】

以下のプログラムの空欄に入る適当なプログラム片を入力してプログラムを完成させなさい。
Private TATE As Integer
Private YOKO As Integer
Private UniCell() As Boolean
Private Sub class_initialize()
TATE = 13
YOKO = 1338

End Sub
Public Sub GetCell()
ReDim UniCell(TATE, YOKO)
Dim i As Integer
Dim j As Integer
For j = 1 To TATE
For i = 1 To YOKO
If Cells(j, i).Interior.Color = vbBlack Then
UniCell(j, i) = True
Else
UniCell(j, i) = False
End IfNext iNext jEnd Sub
Public Sub SetCell()
Dim i As Integer
Dim j As Integer
For j = 1 To TATE
For i = 1 To YOKO
If UniCell(j, i) ThenCells(j, i).Interior.Color = vbBlack
ElseCells(j, i).Interior.Color = vbWhiteEnd IfNext iNext jEnd Sub
Public Sub SetNext()
Dim NextCell() As Boolean
Dim i As Integer
Dim j As Integer
Dim ki As Integer
Dim kj As Integer
Dim Counter As Integer
ReDim NextCell(TATE, YOKO)
For j = 1 To TATE
For i = 1 To YOKOCounter = 0For kj = -1 To 1
For ki = -1 To 1If【１】Then39

If j + kj > 0 And j + kj <= TATE And i + ki > 0 And_i + ki <= YOKO Then
If UniCell(j + kj, i + ki) Then
【２】
End IfEnd IfEnd IfNext ki
Next kj
If

【３】
Then
If Counter = 2 Or Counter = 3 Then
NextCell(j, i) = True
Else
NextCell(j, i) = False
End IfElse
If Counter = 3 Then
NextCell(j, i) = True
Else
NextCell(j, i) = False
End IfEnd IfNext iNext j
For j = 1 To TATE
For i = 1 To YOKO
UniCell(j, i) = NextCell(j, i)
Next iNext jEnd Sub40