VBA練習問題解答
総合練習問題7解答

Excelマクロ練習問題集、エクセルVBAの学習教材
公開日:2013年5月以前 最終更新日:2019-11-03

第67回.総合練習問題7解答

マクロVBA練習問題の解答ページです。


マクロVBA練習問題

ブックとシートを扱う問題です。
まず以下を見て下さい。

マクロVBA練習問題

シート「ブック一覧」のA列にパスB列にブック名が入っています。
このブックを開き、中の全てのシート名を取得して下さい。
先頭に「シート一覧」というシート追加し、
A列にブック名、B列にシート名を書き出して下さい。
ただし、繰り返し実行可能なように、既に「シート一覧」というシートがある場合も考慮する事。
結果は以下のようになります。

マクロVBA練習問題

少し難しいプログラムになります。

ヒント!
既に「シート一覧」というシートがある場合は、
一旦シートを削除してから行う方が簡単です。

シンキングタイム

シンキングタイム開始


シンキングタイム終了

マクロVBA練習問題解答

では解答のマクロVBAコードです。
※.Valueは適宜省略しています。

Sub 練習1()
  Dim i As Long
  Dim OutRow As Long
  Dim wb読込 As Workbook
  Dim ws一覧 As Worksheet
  Dim ws As Worksheet
  
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  
  'シート「シート一覧」を削除
  On Error Resume Next
  Worksheets("シート一覧").Delete
  On Error GoTo 0
  
  '「シート一覧」を作成
  Set ws一覧 = Sheets.Add(Before:=Sheets(1))
  ws一覧.Name = "シート一覧"
  ws一覧.Range("A1") = "ブック名"
  ws一覧.Range("B1") = "シート名"
  
  '「シート一覧」2行目から
  OutRow = 2
  With Worksheets("ブック一覧")
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      'ブックを開く
      Set wb読込 = Workbooks.Open(.Cells(i, 1) & "\" & .Cells(i, 2))
      'ブック名を出力
      ws一覧.Cells(OutRow, 1) = wb読込.Name
      '全シート名を出力
      For Each ws In wb読込.Sheets
        ws一覧.Cells(OutRow, 2) = ws.Name
        OutRow = OutRow + 1
      Next ws
      '開いたブックを閉じる
      wb読込.Close SaveChanges:=False
    Next i
  End With
  
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
End Sub

それなりに長いマクロになっています。
今までに説明した、ステートメント・プロパティ・メソッドだけを使ったつもりです。
書き方は色々あります。

'シート「シート一覧」を削除
On Error Resume Next
Worksheets("シート一覧").Delete
On Error GoTo 0

この部分は、

For Each ws In Sheets
  If ws.Name = "シート一覧" Then
    ws.Delete
  End If
Next ws

本来は、このように書く方が良いでしょう。
On Error のサンプルをかねて、回答ではこのようにしてみました。
Setステートメントをうまく使うと、マクロがすっきりします。
何度も書いて覚えて下さい。



同じテーマ「マクロVBA練習問題解答」の記事

第36回.総合練習問題4解答
第43回.総合練習問題5解答
第50回.総合練習問題6解答
第67回.総合練習問題7解答
第78回.総合練習問題8解答
第81回.総合練習問題9解答
第86回.総合練習問題10解答
練習問題1(For~Nextの練習)解答
練習問題2(最終行の取得の練習)解答
練習問題3(二重ループの練習)解答
練習問題4(Ifの練習)解答


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ