VBAでシート名を取得する方法【図を使って初心者の方にもわかりやすく解説】

Left Caption

豆父ちゃん

VBAでシートを区別することができれば、いろんな作業の効率をアップさせることができるのでは。シート名の取得はどうやってやるの・・?

こんな疑問にお答えします。

結論からいうと、オブジェクト型変数を使ってシート名を宣言する!です。

オブジェクト型変数と言われてもよくわからない!という方がほとんどではないでしょうか。作業効率アップに繋がるVBAを数多く開発している私でも、専門的な用語で説明されると、なかなかピンときません。

この記事では、VBAに関する専門的な知識がない方でもシート名を取得するVBAが扱えるようにいろんなサンプルを使って紹介しています。

記事の中ではオブジェクト型変数や宣言と説明がありますが、わからないと思ったら流し読みして問題ありません。重要なのは専門的な用語を理解するよりも、シート名の取得VBAを扱えるようになる!ということです。シート名の取得VBAは専門用語を100%理解しなくても、プログラムに慣れることで簡単に扱うことができるようになります。是非この記事を参考にして、シート名の取得VBAをマスターしてください。

 

シート名を取得するVBAの書き方

シート名の取得VBAはプログラムの一番最初に記載します。シート名を代入するためのオブジェクト型変数を宣言し、宣言したオブジェクト型変数にシート名を入れるというプログラムを作成します。

基本構造

1 Dim 〇〇 As Worksheet
2 Set 〇〇 = Sheets(△△)

〇〇…オブジェクト型変数
△△…数字またはシートの名前

〇〇に書きやすい変数を入れ、△△に数字またはSheet名を入れるだけ!たったこれだけでシート名の宣言が完了です。

 

Left Caption

豆父ちゃん

変数には「Ash」や「Bsh」というような短く書きやすい変数にすることがおすすめ。

Set 〇〇 = Sheets(△△) の Set ってなんだろうと疑問に思う方が多いのではないでしょうか。

Set とは Setステートメントのことです。

オブジェクト型変数に値を入れたいときに Set を前に記載して使用します。オブジェクト型変数はワークブック、ワークシート、セルなどのことです。オブジェクト型変数は「~の場所」と考えるとイメージがつきやすいと思います。

上記で紹介したように、オブジェクト型変数の宣言を行いSetステートメントでシート名の情報を入れる!という作業でほぼシートの区別は完了です。あとはどうやってシートの情報を取得するか!を理解すればシート名の取得VBAを扱うことができつようになります。

 

シートの名前からシート情報を取得する方法

シートの名前からシート情報を取得する方法を紹介します。

 

シートの名前を「1番目」、「2番目」と設定します。シート名の取得VBAを使えば、1番目シートと2番目シートを区別することができいろんなエクセル作業に応用することができます。

サンプルVBA(シートの名前を取得)

サンプルとして、1番目シートのE5セルに「テストSheet1」というテキストを入力。2番目シートのE5セルに「テストSheet2」というテキストを入力する!というVBAを作成してみます。

1 Sub テスト()
2 Dim Ash As Worksheet
3 Set Ash = Sheets(“1番目")
4 Dim Bsh As Worksheet
5 Set Bsh = Sheets(“2番目")
6 Ash.Cells(5,5) = “テストSheet1"
7 Bsh.Cells(5,5) = “テストSheet2"
8 End Sub

 

実行結果

上記のサンプルVBAを実行すると下記のような結果になります。

 

実行結果Sheet名「1番目」には「テストSheet1」が入力

Sheet名「2番目」には「テストSheet2」が入力

シートを区別するVBAは、多くのシートが作られたエクセルファイルでよく使われます。同時に複数のシートを編集することができるので、いろんな作業に応用することができます。

注意事項

シートの名前からシート情報を取得する方法には注意が必要です。それは、シートの名前を変更するとVBAが動作しなくなってしまう!ということです。

上記のように「1番目」というシートの名前を「1番」に変更してVBAを実行するとエラーとなってしまいます。いろんな方が扱うエクセルファイルではシートの名前を勝手に変更されてしまう可能性があります。シートの名前を変更しないように注意喚起しておかなければいけません。

 

シートの配列からシート情報を取得する方法

シートの配列からシート情報を取得します。

 

シートの配列(順番)でシート名を取得するため、「Sheet1」や「Sheet2」といったような最初から名前が設定されたシートからでもシート名を取得することができます。

サンプルVBA(配列からシートを区別)

サンプルとして、左から2番目シートのE5セルに「テスト2配列2」というテキストを入力。左から4番目シートのE5セルに「テスト2配列4」というテキストを入力する!というVBAを作成してみます。

1 Sub テスト2()
2 Dim Ash As Worksheet
3 Set Ash = Sheets(2)
4 Dim Bsh As Worksheet
5 Set Bsh = Sheets(4)
6 Ash.Cells(5,5) = “テスト2配列2"
7 Bsh.Cells(5,5) = “テスト2配列4"
8 End Sub

 

実行結果

実行すると下記のような結果になります

実行結果左から1番目のSheeにはテキストなし

左から2番目のSheeには「テスト2配列2」が入力

左から3番目のSheeにはテキストなし

左から4番目のSheeには「テスト2配列4」が入力

Set 〇〇 = Sheets(△△) 中の△△にシートの配列(順番)を入力してシート名を取得方法です。

注意事項

シートの配列からシート情報を取得する方法には注意が必要です。それは、シートの順番を変更するとVBAが思い通りに動作しなくなってしまう!ということです。

「2番目」シートと「Sheet3」シートの順番が入れ替わると、「Sheet3」シートにテキストが入力されます。いろんな方が扱うエクセルファイルで、勝手にシートの順番が入れ替えられるとこのような処理が行われてしまいます。

先ほどのシート名からシート情報を取得するVBAではシート名が変更されると実行エラーとなり異常に気付くことができます。しかしシートの配列からシート情報を取得するVBAでシートの順番を入れ替えられた場合、VBAの実行エラーが発生しないため間違った処理に気づくことができない!とても危険な状態です。

シートの配列からシート情報を取得するVBAを設定する場合、シートの順番を変えるだけで思い通りの処理が行われなくなることを職場の全員が理解しておく必要があります。

 

開いているシートの情報を取得する方法

使用中のシート情報を取得します。

サンプルVBA(開いているシートの情報を取得)

サンプルとして、今開いているシートのE5セルに「テスト3アクティブ」というテキストを入力する!というVBAを作成してみます。

1 Sub テスト3()
2 Dim Ash As Worksheet
3 Set Ash = Activesheet
4 Ash.Cells(5,5)="テスト3アクティブ"
5 End Sub

 

実行結果

実行すると下記のような結果になります。

 

実行結果選択しているSheetに「テスト3アクティブ」が入力

Set 〇〇 = Sheets(△△) 中のSheets△△にActivesheetを入力してシート名を取得方法です。シートを区別しないで操作中のシートでVBAを使いたい!というエクセルファイルに導入しましょう。

 

注意事項

ここで、Activesheetを使わなくても、開いているシートにテキストを入力することができるのでは?と考える方がいると思います。下記のようにActivesheetを使わなくてもテキストを入力することは可能です。

1 Sub テスト3-1()
2 Cells(5,5)="テスト3アクティブ"
3 End Sub

Activesheetが必要なときの必要ではないときの使い分けはなんなのかというと、つのシート内で処理が完結するVBAはActivesheetの宣言は必要ありません。シートを区別して、いろんなシートへの処理が必要なときに使用します。

なるべくシンプルなVBAにしたいという方は、Activesheetの宣言を省略しても問題ありません。

 

一番右側にあるシートの情報を取得する方法

最後のシート(一番右)のシート名を取得します。

 

サンプルVBA(一番右側にあるシートの情報を取得)

サンプルとして、一番右側にあるシートのE5セルに「テスト4カウント」というテキストを入力する!というVBAを作成してみます。

1 Sub テスト4()
2 Dim Ash As Worksheet
3 Set Ash = Sheets(Sheets,Count)
4 Ash.Cells(5,5)="テスト4カウント"
5 End Sub

 

実行結果

実行すると下記のような結果になります。

 

実行結果一番右側にあるシートのE5セルに「テスト4カウント」が入力

Set 〇〇 = Sheets(△△) 中の△△にSheets,Countを入力してシート名を取得方法です。シートを区別しないで一番右にあるシートでVBAを使いたい!というエクセルファイルに導入しましょう。

職場では、ワークシートを一番右側に新規作成→一番右側のシート名を取得するVBAを使って処理をする!というVBAがよく使われています。そうすれば、シートの名前を変更されたり、シートの順番を変えられても問題なく処理することができます。

 

シート名を取得するVBAを使ってできることは

シート名を取得するVBAを使うと、作業効率アップに繋がるいろんなエクセルVBAを開発することができるようになります。

シート名の取得を使ったVBA

 

  • シート毎に印刷するVBA
  • シート1をコピーするVBA
  • シート2とシート3を削除するVBA

エクセル業務の効率を上げようと考えたとき、シート名を取得するVBAの設定は必ずと言っていいほど必要になります。実際の仕事に導入したほとんどのエクセルVBAにはシート名の取得が設定されています。

シート名を取得するVBAを使えばどのようなことができるのかいくつか紹介します。

 

多機能エクセルカレンダー

エクセルカレンダーでは年間カレンダーシートと週間カレンダーシートのスケジュールを一致させるVBAを組み込んでいます。エクセルカレンダーではシート名前を変更させることがないので、シートの名前からシート情報を取得する方法でVBAを作っています。

 

動画で紹介しているようなエクセルカレンダー(年間カレンダーと月間カレンダーが別々のシート)を使ってスケジュール管理をする場合、予定の転記漏れは絶対に発生させてはいけません。例えば、年間カレンダーを見てスケジュールを組んだあとに月間カレンダーを確認するとすでに大事なスケジュールが組まれている!ということが発生してしまいます。

このようなスケジュール調整のミスを防止するために、シート名を取得するVBAを使ったスケジュール内容を同期するVBAを設定しています。

エクセルカレンダーにはスケジュールを同期させるVBAの他に、曜日と背景色を自動的に変更するVBA、無駄なスクロールを省略することができるハイパーリンクVBA、うるう年にも対応した年度切替VBAが設定されています。

スケジュール管理をエクセルで行っている方におすすめのカレンダーになっています。

上記の動画で紹介されているエクセルカレンダーは下記のサイトでダウンロードしてお使いいただけます。設定されたVBAについて詳しくしりたいという方はこちらの記事で詳しく紹介しています。気になる方はチェックしてみてください。

 

複数のエクセルファイルを1つにまとめるVBA

複数のエクセルファイルを1つにまとめるVBAでは、指定するエクセルファイルにある全てのシートを取得し1つのエクセルファイルに集約するVBAを組み込んでいます。このVBAではシートの配列(順番)からシート情報を取得する方法でVBAを作っています。

エクセルファイル自体をコピペして資料作成をしていると、いつの間にかフォルダ内にあるエクセルファイルがもの凄い数になっていることがありますよね。私の職場では、資料作成のやり方が明確に決められていないので、エクセルファイル自体をコピペして編集する人もいれば、シートをコピペして編集する人もいます。どちらのやり方が正解というわけではありませんが、エクセルファイル(ブック)をなるべく一つにまとめてほしい!という依頼を受け、複数のエクセルファイルを一つにまとめるVBAを開発しました。

複数のエクセルファイルを一つにまとめるVBAを使えば、エクセルファイルを一つにまとめる作業は一瞬で処理することができます。

VBAでは、多くのシートを集約したとき同じシート名のものがあるとVBAがエラーになってしまう!という問題が考えられたため、集約したときシート名を変更する仕組みを施しています。

ほかにも、複数のエクセルファイルの情報(ファイル名、更新日など)を一覧表にするVBAや複数のエクセルファイルを同時に操作するVBAを開発しました。気になる方は下記のリンクを参考にしてみてください。

下記のリンクからVBAについて詳しく紹介している記事に移動することができます。気になる方は是非参考にしてみてください。

シート名を取得するVBAを使いこなせるようになると、いろんなエクセル作業の効率をアップさせることができます。紹介したVBAはほんの一部です。是非シート名を取得するVBAの使い方をマスターして作業効率アップに繋がるいろんなVBAを開発してみてください。

 

これからVBAを勉強をはじめるには

シート名を取得するVBAのように、VBAには仕事の効率をアップさせることができる機能がいろいろあります。VBAのプログラミングスキルを身に着けることで、今まで何時間もかかかっていた作業をほんの数分で処理することができるようになります。

VBAを基本から学びたい!という方におすすめなのが、オンラインプログラミング学習サービス【1st Step】です。

【1st Step】は初心者のためのプログラミング学習サービスで、C言語・java・VBAの3つのプログラミングの基礎をオンラインで勉強することができます。

 

  • 基礎からプログラミングを勉強したい
  • まとまった勉強時間の確保が難しい
  • 途中で挫折したくない

上記のように考えている方に【1st Step】はおすすめです。
下記の記事では、オンラインプログラミング学習サービス【1st Step】の特徴や私の体験など詳しく紹介しています。

これからVBAの勉強を始めようと考えている方は是非参考にしてみてください。