【ランダム順出題】Access VBA スタンダード 模擬試験 ⑤ Access VBA ベーシック 模擬問題 模擬試験 2026.09.142026.09.23 制限時間は60分です。 問題の出題順や選択肢の並び順は、サイト側で自動でシャッフルされます。 準備が整い次第、ボタンを押して試験を開始してください。 1. ADOのRecordsetオブジェクトを格納したオブジェクト変数rstから、Age フィールドの値を参照したい。フィールドを参照する記述として誤っているものを、以下の選択肢より1つ解答しなさい。 rst.Fields("Age").Value rst![Age].Value rst.Field("Age").Value rst("Age").Value None 2. 標準モジュール「Module1」に次のExam1を、別の標準モジュール「Module2」にCallExam1・CallExam2・CallExam3を記述した。「Exam1」プロシージャを実行したときの結果として最も適切なものはどれか。以下の選択肢より1つ解答しなさい。ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー'標準モジュール Module1Sub Exam1() Call CallExam1 Call CallExam3 Call CallExam2 MsgBox "完了"End Subーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー'標準モジュール Module2Sub CallExam1() Debug.Print "CallExam1"End SubPublic Sub CallExam2() Debug.Print "CallExam2"End SubPrivate Sub CallExam3() Debug.Print "CallExam3"End Sub CallExam1/CallExam3/CallExam2 の3行が出力される。 コンパイルエラー(Sub または Function が定義されていません)になり、実行できない。 CallExam1/CallExam3 の2行が出力されてから、完了のメッセージが表示される。 完了のメッセージだけが表示される。 None 3. フォーム「form1」のテキストボックス「txt1」に、次のコードが記述されている。form1 をフォームビューで開き、txt1 に半角の「a」を1回入力しようとした。このときの結果として正しいものはどれか。以下の選択肢より1つ解答しなさい。Private Sub txt1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 8, 9, 13 Exit Sub Case Else If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 MsgBox ("0から9の数字以外は入力できません") End If End SelectEnd Sub 何のメッセージも出ずに、「a」は入力されない。 「0から9数字以外は入力できません」というメッセージは表示されるが、「a」は入力される。 「0から9数字以外は入力できません」というメッセージが表示され、「a」は入力されない。 何のメッセージも出ず、「a」がそのまま入力される。 None 4. 次の表は、定数の種類・宣言場所・適用範囲と、宣言に使うステートメントの対応を示している。空欄に入る適切なステートメントを解答しなさい。 種類 宣言場所 適用範囲 使用ステートメント パブリック定数 標準モジュールの宣言セクション すべてのモジュールの全プロシージャから参照可能 モジュールレベル定数 宣言セクション 宣言されたモジュール内の全プロシージャから参照可能 プロシージャレベル定数 プロシージャ内 宣言されたプロシージャ内からのみ参照可能 5. 次のコードは、Recordsetをカーソルの種類「adOpenForwardOnly(前方専用)」で開いている。このとき、 レコードセットを最終レコードまで行く前の段階で RecordCountプロパティが返す値として最も適切ものはどれか。以下の選択肢より1つ解答しなさい。Dim conn As New ADODB.ConnectionDim rst As New ADODB.Recordsetconn.Open ...(省略)rst.Open "SELECT * FROM [Table Product1]", conn, adOpenForwardOnly, adLockReadOnlyMsgBox rst.RecordCount 1 実際に取得したレコードの件数 -1 0 None 6. DAOを 標準で利用することができるが、参照設定で有効なっているか確認にするライブラリはどれか。以下の選択肢より1つ解答しなさい。 Microsoft Office XX.X Access database engine Object Library Microsoft ActiveX Data Objects X.X Library Microsoft Scripting Runtime Microsoft Access XX.X Object Library None 7. 次のコードは、DAOを使って、名前を付けずに作成した一時的なクエリを実行し、その実行結果をレコードセットに格納して、先頭レコードのProduct Nameを表示する処理である。空欄に入る語句を解答しなさい。 Sub Exam1() Dim dbs As DAO.Database Dim qdf As DAO.QueryDef Dim rst As DAO.Recordset Set dbs = CurrentDb Set qdf = dbs.CreateQueryDef("", "SELECT * FROM [Table Product1]") Set rst = qdf.() MsgBox rst.Fields("Product Name").Value rst.Close Set rst = Nothing: Set qdf = Nothing: Set dbs = Nothing MsgBox "完了"End Sub 8. 次のコードは、テーブルを開いた状態でレコードを削除した直後に、別のレコードへ移動せずにそのカレント位置の値を表示しようとしエラーとなるものである。カレント位置に表示される、以下の空欄に入る適切な語句を解答しなさい。 Sub Exam1() Dim conn As ADODB.Connection Dim rst As ADODB.Recordset Set conn = CurrentProject.Connection Set rst = New ADODB.Recordset rst.Open "[Table Sports1]", conn, adOpenKeyset, adLockOptimistic rst.Delete 'カレント位置には と表示される MsgBox rst.Fields("Name of sport").Value '削除済みですので実行時エラーとなります。 rst.Close Set rst = Nothing: Set conn = Nothing MsgBox "完了"End Sub 9. テーブル Table Product1 に連結したフォーム F_Product があり、標準モジュールとフォームモジュールに次のコードが記述されている。フォームを開いて次の操作を行った。・1件目:No「C2001」のレコードで Price を 12000 から 13000 に変更し、次のレコードへ移動した。・2件目:No「C2002」のレコードで Price を 7800 から 8800 に変更し、次のレコードへ移動した。その後 3件目でbtn1 をクリックした。lbl1 に表示される内容として、最も適切なものを選びなさい。1件目2件目【標準モジュール】Type MeType MeNo As String MeName As String MeCategory As String MePrice As CurrencyEnd Type【F_Product フォームモジュール】Dim MeProduct() As MeTypePrivate Sub Form_AfterUpdate() Static i As Long ReDim Preserve MeProduct(i) MeProduct(i).MeNo = Me.txt1.Value MeProduct(i).MeName = Me.txt2.Value MeProduct(i).MeCategory = Me.txt3.Value MeProduct(i).MePrice = Me.txt4.Value i = i + 1 Me.btn1.Enabled = TrueEnd SubPrivate Sub btn1_Click() Dim i As Long Me.lbl1.Caption = "" For i = 0 To UBound(MeProduct) Me.lbl1.Caption = Me.lbl1.Caption & _ MeProduct(i).MeNo & "," & _ MeProduct(i).MeName & "," & _ MeProduct(i).MeCategory & "," & _ MeProduct(i).MePrice & vbCrLf Next iEnd Sub 最後に編集した1行「C2002,Folding Chair,Chair,8800」だけが表示される。 2行が表示される。1行目「C2001,Hi Chair,Chair,13000」、2行目「C2002,Folding Chair,Chair,8800」。 2行が表示され、Price は「¥13,000」「¥8,800」のように通貨記号と桁区切り付きで表示される。 2行が表示される。1行目「C2001,Hi Chair,Chair,12000」、2行目「C2002,Folding Chair,Chair,7800」。 None 10. オブジェクトブラウザの表示・検索方法・終了の操作に関する説明として最も適切ものはどれか。以下の選択肢より1つ解答しなさい。 F2 キーで表示するが、検索はイミディエイトウィンドウに調べたい検索語句を入力して行う。閉じるには、右上の「ウィンドウを閉じる」ボタンをクリックする。 「表示」メニュー→「オブジェクト ブラウザ」、または F2 キーで表示し、「検索文字列」ボックスに検索語句を入力して「検索」ボタンをクリックして検索する。閉じるには、右上の「ウィンドウを閉じる」ボタンをクリックする。 「表示」メニュー→「オブジェクト ブラウザ」、または F5 キーで表示し、「検索文字列」ボックスに検索語句を入力して「検索」ボタンをクリックして検索する。閉じるには、右上の「ウィンドウを閉じる」ボタンをクリックする。 F2 キーで表示し、「検索文字列」ボックスに検索語句を入力して「検索」ボタンをクリックして検索する。閉じるには、イミディエイトウィンドウに「?閉じる」と入力する None 11. 次のコードは、Table1を基準として、Table5と一致しないレコードも含めて左外部結合して取り出すものである。以下の空欄に入る適切なコードを解答しなさい。Sub Exam1() Dim N As String N = "SELECT Table1.ID, Table1.data1,Table5.data7 FROM Table1 Table5 ON Table1.ID = Table5.ID;" CurrentDb.QueryDefs("Query1").SQL = N DoCmd.OpenQuery "Query1" MsgBox "完了"End Sub 12. 次のコードは、 複数のフォームが表示されている中で ボタンをクリックして現在アクティブなフォームを閉じるコードである。以下の空欄に入る適切なコードを解答しなさい。Private Sub btn1_Click() DoCmd.Close acForm, .Name MsgBox "完了"End Sub 13. Like演算子の範囲指定した「[文字-文字]」に関する説明として最も適切ものはどれか。以下の選択肢より1つ解答しなさい。 範囲指定では数字は使えず、英字のみ指定できる。 範囲は必ず昇順で指定する必要があり、降順(例:[9-1]、[z-a])では正しく検索できない。 範囲の両端の文字は検索結果に含まれない。 Like演算子の範囲指定は、昇順でも降順でも同じ結果が得られるため、書く順序を気にする必要はない。 None 14. 次のプロシージャを実行したときの実行結果とし最も適切ものはどれか。以下の選択肢より1つ解答しなさい。Sub Exam1() Dim N As Long N = 10 If N > 100 And N Mod 2 = 0 Or N < 20 Then Debug.Print N * 3 Else Debug.Print N + 1 End If MsgBox "完了"End Sub イミディエイトウィンドウに 11 が出力される。 イミディエイトウィンドウに 30 が出力される。 何も出力されず、正常に終了する。 実行時エラーが発生する。 None 15. 処理の高速化の観点から、事前バインディングと実行時バインディングを比較した説明として、最も適切なものを1つ選びなさい。 事前バインディングは実行前に型が確定するため、実行時バインディングより高速に動作する。 実行時バインディングのほうが常に高速である。 事前バインディングは、実行時に参照設定が不要になる分だけ、実行時バインディングより高速に動作する。 どちらのバインディングでも処理速度に差はない。 None 16. Err オブジェクトの Number プロパティが返すエラー番号と、そのエラーの内容の組み合わせとして正しいものはどれか。以下の選択肢より1つ解答しなさい。 11 ー インデックスが有効範囲にありません。 13 ーメモリが足りません。 6 ーオーバーフローしました。 9 ー 0 で除算しました。 None 17. 次のSQL文は、Excelブックへの接続において Excelブックのシート名 「Sheet1」からレコードセットを取得するものである。シート名を指定する語句を、空欄に解答しなさい。 conn.Excecute ("SELECT * FROM ") 18. 次のコードは、「C:¥test」フォルダの中にあるすべてのサブフォルダについて、そのサブフォル名と最後に更新された日時を順に表示する処理である。空欄に入る語句を解答しなさい。Sub Exam1() Dim fso As New FileSystemObject Dim fld As Folder Dim sub_fld As Folder Set fld = fso.GetFolder("C:¥Data") For Each sub_fld In fld. Debug.Print sub_fld.Name, sub_fld. Next Set fso = Nothing Set fld = Nothing Set sub_fld = Nothing MsgBox "完了"End Sub 19. 次のコードは、Table2から「data7」フィールドを削除するものである。 空欄に入る適切なコードを解答しなさい。 Sub Exam1() Dim N As String DoCmd.SetWarnings False N = "ALTER TABLE Table2 data7;" DoCmd.RunSQL N DoCmd.SetWarnings True MsgBox "完了"End Sub 20. 次のコードは、カレントデータベースのファイル名を取得しメッセージで表示するものである。以下の空欄に入る適切な語句を解答しなさい。 Sub Exam1() Dim dbs As String dbs = CurrentProject. MsgBox dbsEnd Sub 21. モジュールのエクスポート・インポートと、その際のファイルの種類に関する説明として最も適切なものはどれか。以下の選択肢より1つ解答しなさい。 モジュールをエクスポートすると、そのモジュールはデータベースファイルの中に上書き保存される。 標準モジュールをエクスポートすると拡張子「.cls」、フォーム・レポートモジュールをエクスポートすると拡張子「.bas」のファイルになる。 モジュールをエクスポートして保存したファイルは、そのファイルを作成した元のデータベースでのみ読み込むことができ、他のデータベースファイルへインポートして再利用したり共有したりすることはできない。 モジュールをエクスポートするとデータベースファイルとは別のファイルとして保存でき、標準モジュールは拡張子「.bas」、フォーム・レポートモジュールは拡張子「.cls」のファイルになる。 None 22. リストボックス「lsta」の中から 選択したプリンタで、レポート「Table Product1」を印刷するコードである。なお印刷の前に現在の既定プリンタを変数に控え、印刷後に元へ戻している。空欄に入る語句の組み合わせとして選択肢の中から適切なものを1つ解答しなさい。Private Sub btn1_Click() Dim OurPrinter As Object If MsgBox("印刷しますか?", vbYesNo) = vbYes Then Set OurPrinter = Application.Printer Set Application.Printer = Application.Printers(【 ① 】) DoCmd.OpenReport "Table Product1" Set Application.Printer = 【 ② 】 Set OurPrinter = Nothing End IfEnd Sub ① Me.lsta.Value ② Nothing ① OurPrinter ② Me.lsta.Value ① Me.lsta.Value ② Application.Printer ① Me.lsta.Value ② OurPrinter None 23. Visual Basic Editor(VBE)のイミディエイトウィンドウから、Subプロシージャを呼び出す方法として適切ものはどれか。以下の選択肢より1つ解答しなさい。 Subプロシージャを呼び出す際は、プロシージャ名の先頭に必ず「?」を付けて記述する必要がある。 結果を返さないSubプロシージャは、プロシージャ名をそのまま記述して呼び出す。引数を渡して実行させることも可能である。 Subプロシージャは引数を渡すことができず、常に引数なしで呼び出す必要がある。 Subプロシージャはイミディエイトウィンドウから呼び出すことができず、コードウィンドウ内でのみ実行可能である。 None 24. 次の「Exam1」プロシージャを実行したとき、イミディエイトウィンドウに出力される内容として最も適切なものはどれか。以下の選択肢より1つ解答しなさい。Sub Exam1() Dim MeStr As String MeStr = Fun1("VBA") Debug.Print MeStr MeStr = Fun2() Debug.Print MeStr MsgBox "完了"End SubFunction Fun1(MeStr As String) As String Fun1 = MeStr & "を小文字にすると" & LCase(MeStr) & "です。"End FunctionFunction Fun2() As String Fun2 = "Fun2"End Function 1行目:VBAの文字数は3文字です。/2行目:Fun2 1行目:Fun2/2行目:VBAを小文字にするとvbaです。 1行目:VBAを小文字にするとvbaです。/2行目:Fun2 1行目:VBAを小文字にするとVBAです。/2行目:Fun2 None 25. 次のコードは、Exam2の1つ目の引数N1を参照渡し、2つ目の引数N2を値渡しにし、Format関数で数値をカンマ区切りに整形するものである。以下の空欄に入る適切な語句を解答しなさい。実行後、Debug.Printによって1行目に 、2行目に が出力される。Sub Exam1() Dim N1 As String Dim N2 As String N1 = "1000" N2 = "2000" Call Exam2(N1, N2) Debug.Print N1 Debug.Print N2 MsgBox "完了"End SubSub Exam2(ByRef N1 As String, ByVal N2 As String) N1 = Format(N1, "#,##0") N2 = Format(N2, "#,##0")End Sub 26. 次のプロシージャを実行したとき、イミディエイトウィンドウに出力される結果として最も適切ものはどれか。以下の選択肢より1つ解答しなさい。Sub Exam1() Dim N As String Dim i As Long, j As Long For i = 1 To 2 For j = 20 To 35 Step 5 N = N & i & ":" & j & " " Next j Next i Debug.Print N MsgBox "完了"End Sub 1:20 1:25 1:30 1:35 1:20 1:25 1:30 1:35 2:20 2:25 2:30 2:35 1:20 1:25 1:30 1:35 1:40 2:20 2:25 2:30 2:35 2:40 1:20 1:25 1:30 2:20 2:25 2:30 None 27. 次のコードは、「C:¥Data」フォルダが存在するかどうかを調べ、存在する場合はさらにその中の「data1.txt」が存在するかどうかを調べて、結果を表示する処理である。以下の空欄に入る適切な語句を解答しなさい。Sub Exam1() Dim fso As New FileSystemObject If fso.("C:¥Data") Then If fso.("C:¥test¥data1.txt") Then Debug.Print "ファイルがあります" End If End If Set fso = Nothing MsgBox "完了"End Sub 28. 標準モジュール(対象オブジェクトのモジュール以外)から、開いているフォーム「form1」上のテキストボックス「txt1」を参照する記述である。誤っているものを以下の選択肢より1つ解答しなさい。 Forms!form1!txt1 Forms("form1").Controls("txt1") Forms!txt1 Forms("form1")("txt1") None 29. 次のコードを記述し、Exam1 プロシージャを実行した。イミディエイトウィンドウにどのように出力されたか、最も適切ものはどれか。以下の選択肢より1つ解答しなさい。Sub Exam1() Dim i As Long Dim j As Long Dim MeArray(5, 5) As String Dim str As String For i = 0 To 5 For j = 0 To 5 MeArray(i, j) = i & "-" & j Next j Next i For i = 0 To 5 For j = 0 To 5 str = str & String(2, " ") & MeArray(i, j) Next j Debug.Print str str = "" Next i MsgBox "完了"End Sub 6行が出力されるが、区切りの String(2, " ") は各要素の「間」だけに挿入されるため、各行の先頭にはスペースが入らない。内容は1行目が「0-0 0-1 0-2 0-3 0-4 0-5」、行が進むごとにインデックスが1ずつ増え、6行目が「5-0 5-1 5-2 5-3 5-4 5-5」のように、いずれも先頭のスペースなしで出力される。 str に前の行の内容が残り続けるため、行が進むごとに前の行が連結され、1行ずつ長くなっていく。 6行が出力される。区切りの String(2, " ") は各要素の前に連結されるため、各行の先頭にも半角スペース2つが入る。内容は1行目が「 0-0 0-1 0-2 0-3 0-4 0-5」、行が進むごとに1次元のインデックスが1ずつ増え、6行目が「 5-0 5-1 5-2 5-3 5-4 5-5」となる。 各行の出力前に str が空にされるため、最後の「 5-0 5-1 5-2 5-3 5-4 5-5」の1行だけが出力される。 None 30. 次のコードは、接続文字列を使わずにカレントデータベースへ接続するものである。 以下の空欄に入る適切な語句を解答しなさい。 Sub Exam1() Dim conn As ADODB.「下記空欄と同じ」 Set conn = CurrentProject. MsgBox "完了"End Sub 31. トランザクションの説明として正しいものはどれか。以下の選択肢より1つ解答しなさい。 レコードを1件ずつ自動的に保存していく仕組みである。 DAOではレコードセットの操作やトランザクションの実行はできない。 トランザクションはBeginTransで開始しなくてもCommitTransメソッドでCommitTransメソッドで変更保存が可能である。 データベースに対する一連の作業をひとつの処理としてとりまとめ、制御する仕組みである。 None 32. 次のコードを実行したときの結果として最も適切なものはどれか。以下の選択肢より1つ解答しなさい。Sub Exam1() Dim N As String Dim rst As Object N = "SELECT COUNT(*) FROM [Table Sports2];" Set rst = CurrentDb.OpenRecordset(N) MsgBox rst.Fields(0).Value MsgBox "完了"End Sub Null値を含むためエラーになり、件数は表示されない。 常に0が表示される。 COUNT(*)はNullを含む行を除いて数えるため、全フィールドに値がある行だけの件数が表示される。 いずれかのフィールドがNull値のレコードも含めた、全レコードの件数が表示される。 None 33. 次のコードは、[Table Sports1]から「Price」が3000以上かつ5000以下のレコードだけを抽出するものである。 以下の空欄に入る適切な語句を解答しなさい。 Sub Exam1() Dim conn As ADODB.Connection Dim rst As ADODB.Recordset Set conn = CurrentProject.Connection Set rst = New ADODB.Recordset rst.Open "[Table Sports1]", conn, adOpenKeyset rst. = "Price >= 3000 And Price <= 5000" MsgBox rst.RecordCount rst.Close Set rst = Nothing: Set conn = Nothing MsgBox "完了"End Sub 34. 次のコードは、DAOのCreateFieldメソッドを使って新しいテーブル [入荷マスタ] にフィールドを追加するものである。先の空欄にはテキスト型を表すデータ型定数が、次の空欄には日付/時刻型を表すデータ型定数が入る。以下の空欄に入る適切な語句を解答しなさい。Sub Exam1() Dim DB As DAO.Database Dim TD As DAO.TableDef Set DB = CurrentDb Set TD = DB.CreateTableDef("入荷マスタ") TD.Fields.Append TD.CreateField("商品コード", , 5) TD.Fields.Append TD.CreateField("入荷日", ) DB.TableDefs.Append TD Set TD = Nothing: Set DB = Nothing MsgBox "完了"End Sub 35. 次のコードは、カレントデータベースと同じフォルダに「a.txt」というテキストファイルを作成し、1行分の文字を書き込む処理である。なお、実行前の時点で、同じ場所に「a.txt」がすでに存在しているものとする。このコードを実行したときの結果として適切ものはどれか。以下の選択肢より1つ解答しなさい。Sub Exam1() Dim fso As New FileSystemObject Dim ts As TextStream Dim strpath As String strpath = CurrentProject.Path & "¥a.txt" Set ts = fso.CreateTextFile(strpath, False) ts.WriteLine "VBA" ts.Close Set fso = Nothing Set ts = Nothing MsgBox "完了"End Sub 既存の「a.txt」の末尾に「VBA」が追加で書き込まれる。 実行時エラーが発生し、既存の「a.txt」は変更されない。 エラーも書き込みも起こらず、そのまま正常終了する。 既存の「a.txt」が破棄され、「VBA」だけが書き込まれた新しいファイルに置き換わる。 None 36. 次のコードは、アプリケーションを使ってフォルダーを選択するダイアログを表示するものである。以下の空欄に入る適切なコードや語句を解答しなさい。Sub Exam1() Dim sh As Object, fld As Object Set sh = CreateObject("") Set fld = sh.(0, "フォルダを選択してください", 0) MsgBox fld Set sh = Nothing Set fld = NothingEnd Sub 37. 次のコードは、開いたTextStreamオブジェクトから1行分を読み取るものである。以下の空欄に入る適切な語句を解答しなさい。 Sub Exam1() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ts As Object, s As String Set ts = fso.OpenTextFile("C:¥Data¥a.txt", ForReading) s = ts. ts.Close MsgBox s Set fso = Nothing Set ts = NothingEnd Sub 38. 次のコードは、エラーが発生した場合に行ラベル「ErrHandler」へ処理へを移し、エラー未発生時にコードが終了するように記述したものである。以下の空欄に入る適切な語句を解答しなさい。Sub Exam1() On Error ErrHandler Dim N As Integer N = 1 / 0MsgBox "完了" SubErrHandler MsgBox "エラーが発生しました"End Sub 39. テーブルの結合の種類、および外部キーに関する説明として最も適切なものはどれか。以下の選択肢より1つ解答しなさい。 左外部結合は、右側のテーブルのすべてのレコードと、左側で共通する値を持つレコードを表示する。 内部結合は、結合した2つのフィールドで共通する値を持つレコードだけを表示し、外部結合はどちらか一方のテーブルのレコードをすべて表示する。 結合における「左」と「右」は、リレーションシップ画面上でのテーブルの配置によって決まる。 外部キーとは、そのテーブル自身の主キーに別名を付けたものであり、テーブルどうしの結合には主キーを、レコードの絞り込みには外部キーをそれぞれ使い分けて指定する。 None 40. ConnectionオブジェクトのExecuteメソッドで取得したレコードセットの説明として正しいものはどれか。以下の選択肢より1つ解答しなさい。 常に前方スクロールカーソルの読み取り専用になる。 カーソルタイプとロックタイプを引数で自由に指定できる。 常に双方向カーソルの更新可能なレコードセットになる。 レコードセットは返らず、必ずエラーになる。 None