EXCEL VBAでシート名を全取得する方法を教えてください!
こんな悩みに回答します。
非表示にできる< 目次 >
こんな悩みの人向け
こんな悩みの人向け
- EXCELのシート名を全部取得したい人
理由は多岐に渡ると思いますが、いつの間にかEXCELのシート数が異常な数になってるケースがありますよね。笑
そんな時に限って、上司から棚卸をお願いされて、 1つ1つシート名を書き出す羽目に・・・なんてことも。
正直 面倒ですので、VBAで一括取得しちゃいましょう。
基本的にコピペでOKです。VBAの使い方が分からない人は、この辺の記事をどうぞ。
Nakamura
-
【説明】VBEで作成したVBAコードの実行方法【EXCEL VBA】
続きを見る
-
【解説付】マクロ・VBE・VBAの違いの説明【EXCEL VBA】
続きを見る
はい。
ということで、説明しますね。
コードの紹介(シンプルver)
シンプルな コードは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub EXCELシート名を全取得_シンプルver() Dim i As Long Dim SheetsCnt As Long SheetsCnt = ThisWorkbook.Sheets.Count For i = 1 To SheetsCnt Debug.Print Sheets(i).Name 'VBEのイミディエイトウィンドウに出力される(VBE上で、Ctrl+G で出現します。) 'ThisWorkbook.ActiveSheet.Cells(i, 1) = Sheets(i).Name '←EXCEL上で出力したい場合は、こちらのコードを有効化してね。 Next i End Sub |
重要なポイント
ここので重要なポイントは、シート名を取得したいEXCELの VBE上で記載することです。
参考までに、実行画面のキャプチャも紹介しておきますね。
Nakamura
イミディエイトウィンドウではなく、EXCEL上に出現させたい場合は、
インラインコメントのコードを参照してください。
インラインコメントのコードを参照してください。
Nakamura
コードの紹介(配列ver)
配列を使用しても、同様の結果を得られることができます。
コードは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub EXCELシート名を全取得_配列使用ver() Dim i As Long Dim SheetsCnt As Long Dim SheetsName() As String SheetsCnt = ThisWorkbook.Sheets.Count ' ReDim SheetsName(1 To SheetsCnt) 'ReDimによりSheetsName()を配列個数分-変数を用意 For i = 1 To SheetsCnt SheetsName(i) = Sheets(i).Name 'ReDimで生成された変数にシート名を格納 Debug.Print SheetsName(i) 'SheetsName(i)に格納されたシート名をイミディエイトウィンドウに出力 'ThisWorkbook.ActiveSheet.Cells(i, 1) = SheetsName(i) '←EXCEL上で出力したい場合は、こちらのコードを有効化してね。 Next i End Sub |
ReDimは結構便利だったりしますので、あえて使用させてもらいます。
インラインコメントに 適当ですが解説いれてるので興味があれば どうぞ。
インラインコメントに 適当ですが解説いれてるので興味があれば どうぞ。
Nakamura
終わりに
お疲れさまでした。
紹介したコードは意外と実践する場が多く、何かと重宝します。
ですので、もしよろしければ本記事をブックマークしておくと良いかもしれません。
意外と使う場面が多いんですよね。
なんといいますか、VBAは シート名を元に制御をしたりしますので。。。
なんといいますか、VBAは シート名を元に制御をしたりしますので。。。
Nakamura
ということで、今回はここまでとなります。
NakamuraBlogでは、便利だったコードや、ニッチなコードを紹介してますので、
もしよろしければ いろいろと見てやってください。
ここまでご覧いただき、ありがとうございました。
終わり。