このサイト・インストラクターのネタ帳のアクセスログを眺めていて、
「debug.print シート名 vba」
「イミディエイトウィンドウ すべてのシートの名前を取得」
といった検索でのアクセスに気づきました。
すべてのシート名を、イミディエイトウィンドウにDebug.PrintするExcel VBA(Visual Basic for Applications)のコードを探していた方による、検索キーワードです。
「debug.print シート名 vba」
という検索キーワードだけからは、Subプロシージャ(マクロ)を探していたのか、イミディエイトウィンドウからコードを実行する方法を探していたのかがわかりませんので、この記事ではそれぞれの、For Each~Nextループを使うコードとFor~Nextループを使うコードをご紹介します。
For Each~Nextでシート名をイミディエイトウィンドウにDebug.Printするサンプルマクロ
まずはSubプロシージャです。
Dim sh As Object ' WorksheetまたはChart For Each sh In Sheets
Debug.Print sh.Name
Next sh
End Sub
ワークシートもグラフシートも存在する可能性を考えて、総称Object型でオブジェクト変数を宣言して、
Dim sh As Object
For Each~Nextループで、
For Each sh In Sheets
シート名をDebug.Printしています。
Debug.Print sh.Name
イミディエイトウィンドウでFor Each~Nextステートメントを実行してシート名を出力
上記のSubプロシージャと同じコードを、イミディエイトウィンドウで実行しても、全シート名をイミディエイトウィンドウに出力できます。イミディエイトウィンドウに、
for each sh in sheets: debug.print sh.name: next
というコードを入力して[Enter]キーを押してコードを実行する
イミディエイトウィンドウで実行するコードは変数宣言は不要なので、先のSubプロシージャの主たる処理、
For Each sh In Sheets
Debug.Print sh.Name
Next
を1行にするために、行の末尾に「:」(コロン)を書いて記述したのが、「for each sh in sheets: debug.print sh.name: next」です。
としても同じです。
こちらのほうが楽に入力できますから、私が手入力する場合はこの「?」を使ったコードを使います。
For~Nextでシート名をイミディエイトウィンドウにDebug.Printするサンプルマクロ
一般に、For Each~Nextループは、カウンター変数を使ったFor~Nextループでも書けますから、先のマクロは以下のようにも書けます。
Dim i As Long For i = 1 To Sheets.Count
Debug.Print Sheets(i).Name
Next i
End Sub
シート名一覧をワークシート上に作成する場合は、どのセルに書き出すのかを指定する必要があるために、For Each~Nextループよりも、For~Nextループを使うほうがシンプルなコードになりますが、今回のようにイミディエイトウィンドウに出力するだけなら、先のFor Each~Nextループのほうがシンプルです。
イミディエイトウィンドウでFor~Nextステートメントを実行してシート名を出力
上記のSubプロシージャと同じコードをイミディエイトウィンドウで実行するなら、以下のとおりです。イミディエイトウィンドウに
for i = 1 to sheets.count: debug.print sheets(i).name: next
というコードを入力して[Enter]キーを押してコードを実行する
もちろん、先のFor Each~Nextループと同じく「debug.print」を「?」で代用した、
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 全シート名をイミディエイトウィンドウにDebug.Print