ここでは VBA の上級者向けとして、以下の分野をすべて網羅した問題セットを紹介します。
- クラスモジュール
- Dictionary
- JSON(Parse/Serialize)
- Web API 呼び出し(WinHTTP)
- ADO(DBアクセス)
- 標準モジュール設計(疎結合・責務分離)
すべて 実務レベルの課題形式で、必要なコード例も付けます。
- 【1】クラスモジュール:社員オブジェクトを作る
- 【2】クラス:商品の小計・消費税を計算する
- 【3】クラス:CSV を読み込んで行オブジェクトを格納する
- 【4】Dictionary:社員名簿(名前→部署)を管理する
- 【5】Dictionary:商品ID → 商品情報オブジェクトのマップ
- 【6】JSON:Dictionary → JSON への変換
- 【7】JSON:JSON → Dictionary 配列への変換
- 【8】Web API:HTTP GET リクエストでデータ取得
- 【9】Web API:HTTP POST でデータを送信
- 【10】ADO:Access DB から社員一覧を取得
- 【11】ADO:データをINSERTして追加
- 【12】標準モジュール設計:疎結合のデータ処理アーキテクチャを組む
【1】クラスモジュール:社員オブジェクトを作る
問題
社員を表すクラス Employee を作成し、以下のメンバーを持たせよ。
- プロパティ:Name(String)、Age(Long)、Department(String)
- メソッド:GetInfo() → “名前/ 年齢 / 部署” 形式で返す
標準モジュールから 3 人分の Employee を作り、Debug.Print で情報を表示せよ。
模範コード(クラス Employee.cls)
Public Name As String
Public Age As Long
Public Department As String
Public Function GetInfo() As String
GetInfo = Name & " / " & Age & " / " & Department
End Function
VB呼び出し側
Sub Q1()
Dim e As Employee
Set e = New Employee
e.Name = "田中"
e.Age = 30
e.Department = "総務"
Debug.Print e.GetInfo
End Sub
VB【2】クラス:商品の小計・消費税を計算する
問題
商品クラス Product を作成し、
価格 × 数量の 小計、および 10% の 税込価格 を返すメソッドを作れ。
【3】クラス:CSV を読み込んで行オブジェクトを格納する
問題
- LineItem クラス:Columns() 配列を持つ
- CSVReader クラス:Load(path) → LineItem のコレクションを返す
標準モジュールから CSV を読み込み、3 行目の 2 列目を表示せよ。
※実務でよくある「1行=1オブジェクト」構造。
【4】Dictionary:社員名簿(名前→部署)を管理する
問題
以下の要件で Dictionary を使う。
- キー:社員名
- 値:部署名
- 追加→検索→一覧表示→削除 の処理を作成
ヒントコード
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
dic("佐藤") = "開発"
dic("田中") = "総務"
Debug.Print dic("佐藤")
VB【5】Dictionary:商品ID → 商品情報オブジェクトのマップ
問題
- Key:商品ID(String)
- Item:前問の Product クラス
クラスと Dictionary の組み合わせによる「オブジェクトマップ」を作成し、
ID=”A001″ なら税込価格を表示せよ。
【6】JSON:Dictionary → JSON への変換
問題
以下のデータを JSON に変換せよ。(JSON.stringify 相当)
Name: "山田"
Age: 40
Skills: ["Excel", "VBA", "SQL"]
VBA-JSON(JsonConverter.bas)使用可。
ヒント
JsonConverter.ConvertToJson(dict)
VB【7】JSON:JSON → Dictionary 配列への変換
問題
以下の JSON をパースし、
Name を全員分 Debug.Print せよ。
[
{"Name": "田中", "Score": 80},
{"Name": "鈴木", "Score": 90}
]
【8】Web API:HTTP GET リクエストでデータ取得
問題
以下の API から JSON を取得せよ(例:ダミー API)。
https://jsonplaceholder.typicode.com/posts/1
WinHttpRequest を使い、取得した JSON の title を表示せよ。
ヒントコード
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", url, False
http.Send
body = http.ResponseText
VB【9】Web API:HTTP POST でデータを送信
問題
以下の JSON を POST し、返ってきたレスポンスを表示せよ。
{"name": "Taro", "age": 20}
Content-Type: application/json
を指定すること。
【10】ADO:Access DB から社員一覧を取得
問題
Access(.accdb)ファイルから
社員テーブル(Employees)を SELECT するプログラムを作成し、
Name 列をすべて表示せよ。
ヒントコード
Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.accdb"
Set rs = cn.Execute("SELECT * FROM Employees")
VB【11】ADO:データをINSERTして追加
問題
Access の Employees テーブルへ
(”Suzuki”, 28, “Sales”)を INSERT せよ。
【12】標準モジュール設計:疎結合のデータ処理アーキテクチャを組む
問題(大型)
次の仕様で、役割ごとにモジュールを分割した設計を行うプログラムを作れ。
【仕様】
1. CSV 読み込み
ファイルから以下の形式を読み取る:
Name, Score
Tanaka,80
Suzuki,90
Sato,70
2. データ処理
Score が 80 以上の人だけ抽出。
3. 結果を JSON に変換。
4. 結果 JSON を API に POST。
モジュール分割例
- CsvReader.bas
→ CSV 読み込みだけ担当 - ScoreFilter.bas
→ データ抽出だけ担当 - JsonWriter.bas
→ JSON 生成だけ担当 - ApiClient.bas
→ Web API POST だけ担当 - Main.bas
→ 上記の呼び出し・制御
「責務の分離」「テストしやすさ」「再利用性」を意識して作る。

