VBA シート・ブック操作 練習問題(10問)+ 解答解説
ここでは シートやブックの操作 をテーマにした中級~上級者向け演習問題を 10 問用意し、模範コードと解説を添えています。
「複数シートの処理」「ブックの操作」「シートの追加・削除」など、実務でよく使うテクニックを整理しました。
Q1. 全シートの A1 に「更新日: 今日の日付」を書き込め
解答例
Sub UpdateAllSheets()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1").Value = "更新日: " & Format(Date, "yyyy/mm/dd")
Next ws
End Sub
VB解説:ThisWorkbook.Worksheets を For Each で回すと、全シートに一括処理できる。
Q2. 新しいシートを追加し、既存シートのデータをコピーせよ
解答例
Sub CopyToNewSheet()
Dim wsNew As Worksheet
Set wsNew = ThisWorkbook.Worksheets.Add
ThisWorkbook.Sheets("Sheet1").Range("A1:C20").Copy wsNew.Range("A1")
End Sub
VB解説:Worksheets.Add で新しいシートを作成し、Copy でデータを貼り付け。
Q3. 複数ブックを開いて、指定シートのデータを統合せよ
解答例
Sub ConsolidateBooks()
Dim wb As Workbook, ws As Worksheet
Dim fDialog As FileDialog, fPath As Variant
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
fDialog.AllowMultiSelect = True
If fDialog.Show = -1 Then
For Each fPath In fDialog.SelectedItems
Set wb = Workbooks.Open(fPath)
Set ws = wb.Sheets("Data")
ws.Range("A1:C20").Copy ThisWorkbook.Sheets("Summary").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
wb.Close False
Next fPath
End If
End Sub
VB解説:
複数ファイルを選択 → 開く → データコピー → 統合シートに貼り付け。
Q4. シートを名前で検索し、存在しなければ追加せよ
解答例
Sub EnsureSheetExists()
Dim ws As Worksheet, found As Boolean
found = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name = "Report" Then found = True
Next ws
If Not found Then ThisWorkbook.Worksheets.Add.Name = "Report"
End Sub
VB解説:
シート存在チェック → なければ追加。実務でよく使うパターン。
Q5. シートを削除するコードを書け(確認メッセージなし)
解答例
Sub DeleteSheet()
Application.DisplayAlerts = False
ThisWorkbook.Sheets("Temp").Delete
Application.DisplayAlerts = True
End Sub
VB解説:DisplayAlerts = False で削除確認をスキップできる。
Q6. シートをコピーして新しいブックを作成せよ
解答例
Sub CopySheetToNewBook()
ThisWorkbook.Sheets("Data").Copy
' コピーされたシートが新しいブックとして開く
End Sub
VB解説:Copy を単独で使うと、新しいブックにシートがコピーされる。
Q7. ブックを保存するコードを書け
解答例
Sub SaveBook()
ThisWorkbook.SaveAs Filename:="C:\Users\Public\Report.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub
VB解説:SaveAs で保存場所と形式を指定できる。
Q8. 開いているすべてのブックを閉じるコードを書け
解答例
Sub CloseAllBooks()
Dim wb As Workbook
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then wb.Close SaveChanges:=False
Next wb
End Sub
VB解説:Application.Workbooks をループして閉じる。自分自身は除外。
Q9. シートを並べ替えるコードを書け
解答例
Sub ReorderSheets()
ThisWorkbook.Sheets("Report").Move Before:=ThisWorkbook.Sheets(1)
End Sub
VB解説:Move メソッドでシートの順序を変更できる。
Q10. シートの保護を設定し、解除するコードを書け
解答例
Sub ProtectSheet()
ThisWorkbook.Sheets("Data").Protect Password:="1234"
End Sub
Sub UnprotectSheet()
ThisWorkbook.Sheets("Data").Unprotect Password:="1234"
End Sub
VB解説:Protect / Unprotect でシートの編集制限を制御できる。
✅ 総まとめ
- Worksheets.Add / Delete / Copy / Move → シートの追加・削除・コピー・並べ替え
- Workbook.Open / SaveAs / Close → ブック操作
- DisplayAlerts → 確認メッセージ制御
- Protect / Unprotect → セキュリティ制御


