VBA練習問題
VBA100本ノック 51本目:シート一覧と印刷ページ数

VBAを100本の練習問題で鍛えます
公開日:2020-12-21 最終更新日:2021-01-13

VBA100本ノック 51本目:シート一覧と印刷ページ数


ブックのシート一覧を作成して、各シートのA1にハイパーリンクする問題です。
さらに、各シートの印刷総ページ数も出力します。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータはご自身でご用意ください。


出題

出題ツイートへのリンク

#VBA100本ノック 51本目
シートの一覧を作成します。
先頭に「目次」シートを追加し、
・A列にシート名を出力
・表示シートのみシート名にA1へのハイパーリンクを作成(非表示シートはリンクしない)
・B列にそのシートを印刷した時の総ページ数を出力
※シート名に注意(記号等)


非表示シートの印刷ページをわざわざ求める必要はありません。
0または空欄で構いません。


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

シートへのハイパーリンクでは、シングルクォートでシート名を囲まないと、記号やスペースを含むシートへのリンクが正しく機能しません。
またシート名にシングルクォートを含む場合も考慮しで''に置換しています、
シート名が数字の場合の対応として文字列指定にしています。

Sub VBA100_51_01()
  Application.ScreenUpdating = False
  Dim wb As Workbook: Set wb = ActiveWorkbook
  Dim ws目次 As Worksheet
  Set ws目次 = getSheet(wb, "目次")
  
  Dim i As Long, ws As Worksheet
  For i = 2 To wb.Worksheets.Count
    Set ws = wb.Worksheets(i)
    ws目次.Cells(i, 1).Value = ws.Name
    If ws.Visible = xlSheetVisible Then
      ws目次.Cells(i, 1).Hyperlinks.Add _
                Anchor:=ws目次.Cells(i, 1), _
                Address:="", _
                SubAddress:="'" & Replace(ws.Name, "'", "''") & "'!A1"
      ws目次.Cells(i, 2).Value = ws.PageSetup.Pages.Count
    End If
  Next
  Application.ScreenUpdating = True
End Sub

Function getSheet(ByVal wb As Workbook, ByVal aName As String) As Worksheet
  On Error Resume Next
  Set getSheet = wb.Sheets(aName)
  If Err Then
    Set getSheet = wb.Worksheets.Add(before:=wb.Sheets(1))
    getSheet.Name = aName
  End If
  With getSheet
    .Cells.Clear
    .Columns(1).NumberFormat = "@"
    .Range("A1:B1").Value = Array("シート名", "ページ数")
  End With
End Function


印刷総ページ数は、シートのPageSetup.Pages.Countで取得できます。
ただし、非表示シートは印刷できないのでページ数を取得しても0になってしまいます。
特に補足はありません。
記事にはVBAを掲載しました。


補足

補足はありません。


サイト内関連ページ

第69回.シートの非表示(Visible,Hidden)
ユーザーが操作・閲覧する必要のないシートは非表示にする事で使い易いExcelブックにします。マスタ情報やマクロでのみ使用するデータが入っているシート等、通常は使用者が変更することがなく、見る必要もないのであれば、シート保護をするより非表示にしてしまった方が、ユーザーにとっては使いやすいブックとなります。
第73回.ページ設定(PageSetup)
・PageSetupオブジェクト ・PrintCommunicationプロパティ ・ヘッダー・フッターのプロパテの設定方法 ・余白の設定方法 ・印刷範囲の設定/クリア:PrintArea ・総ページ数:Pages.Count ・改ページの位置を設定:PageBreak ・最後に

第95回.ハイパーリンク(Hyperlink)
・Hyperlinksコレクション ・Hyperlinkオブジェクト ・ハイパーリンクの追加 ・ハイパーリンクの削除 ・既に設定されているハイパーリンクの扱い方




同じテーマ「VBA100本ノック」の記事

48本目:配列と数値型
49本目:条件付き書式の判定
50本目:トリボナッチ数列
51本目:シート一覧と印刷ページ数
52本目:複数シートの一括印刷
53本目:テーブルの扱いと年齢計算
54本目:シートのChangeイベント
55本目:他ブックのマクロを起動
56本目:数式内の自身のシート名を消す
57本目:ファイルの更新日時
58本目:番号リストを簡潔にした文字列で返す


新着記事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」をお願いいたします。
本文下部へ