シート名を取得するVBAの設定【シートを区別することで作業効率アップ】
こんな疑問にお答えします。
結論からいうと、オブジェクト型変数を使ってシート名を宣言する!です。
オブジェクト型変数と言われてもよくわからない!という方がほとんどですよね。
実際のVBAではオブジェクト型変数を設定することになりますが、
オブジェクト型変数を深く理解していなくてもできるシート名の取得方法をご紹介していきます。
- 難しいことはいいから、VBAでシートを区別したい
- 別シートに情報を転記するVBAを設定したい
- シート名を取得するVBAを使って作業効率をアップさせたい
このような悩みを抱えている方に参考にして頂きたい内容になっています。
いろんなマクロを開発している私でも、専門的な用語で説明されるとなかなかピンとこないことがほとんどです。
この記事を順番に読み進めていくと、専門用語を完璧に理解しなくてもシート名を取得するVBAを扱えるようになるはずです。
VBAでシートの区別ができるようになると、より実務向きのマクロを開発することができるようになります。
例えばこんな感じ
記事の中ではオブジェクト型変数や宣言と説明がありますが、わからないと思ったら流し読みして問題ありません。
重要なのは専門的な用語を理解するよりも、「シート名を取得するVBA」を扱えるようになる!ということです。
「シート名を取得するVBA」は専門用語を100%理解しなくても、プログラムに慣れることで簡単に扱うことができるようになります。
是非この記事を参考にして「シート名を取得するVBA」をマスターしてください。
目次
シート名を取得するVBAの書き方
シート名の取得VBAはプログラムの一番最初に記載するのが一般的です。
シート名を代入するためのオブジェクト型変数を宣言し、宣言したオブジェクト型変数にシート名を入れるというプログラムを作成します。
基本構造
Dim 〇〇 As Worksheet
Set 〇〇 = Sheets(△△)
〇〇…オブジェクト型変数
△△…数字またはシートの名前
〇〇に書きやすい変数を入れ、△△に数字またはSheet名を入れるだけ!たったこれだけでシート名の宣言が完了です。
Set 〇〇 = Sheets(△△) の Set ってなんだろう?と疑問に思う方が多いのではないでしょうか。
ちょっと専門的な話になりますが、
Set とは Setステートメントのことです。
オブジェクト型変数に値を入れたいときに Set を前に記載して使用します。
オブジェクト型変数はワークブック、ワークシート、セルなどのことで、「~の場所」と考えるとイメージがつきやすいと思います。
上記で紹介したように、オブジェクト型変数の宣言を行いSetステートメントでシート名の情報を入れる!という作業でほぼシートの区別は完了です。
あとはどうやってシートの情報を取得するか!を理解すればシート名の取得VBAを扱うことができつようになります。
「シートの名前」からシート情報を取得する方法
シートの名前からシート情報を取得する方法を紹介します。
シートの名前を「1番目」、「2番目」と設定
シート名「1番目」とシート名「2番目」を区別することができいろんなエクセル作業に応用することができます。
シートの名前からシート情報を取得するVBAのサンプル事例
サンプル事例として、
1番目シートのE5セルに「テストSheet1」というテキストを入力。2番目シートのE5セルに「テストSheet2」というテキストを入力する
というVBAを作成してみます。
Sub テスト()
Dim Ash As Worksheet
Set Ash = Sheets("1番目")
Dim Bsh As Worksheet
Set Bsh = Sheets("2番目")
Ash.Cells(5,5) = "テストSheet1"
Bsh.Cells(5,5) = "テストSheet2"
End Sub
実行結果
上記のサンプルVBAを実行すると下記のような結果になります。
シート名「1番目」のE5セルに「テストSheet1」が入力
シート名「2番目」のE5セルに「テストSheet2」が入力
という結果になりました。
6行目以降のプログラムを追加していけば、入力するテキストをいくらでも追加することが可能です。
注意事項
シート名からシート情報を取得する方法には注意が必要です。
それは、シートの名前を変更するとVBAが動作しなくなってしまう!ということ。
上記のように「1番目」というシートの名前を「1番」に変更してVBAを実行すると上記のようなエラーが表示されます。
いろんな方が扱うエクセルファイルではシートの名前を勝手に変更されてしまう可能性があるので、シートの名前を変更しないように注意喚起しておかなければいけません。
シートの配列からシート情報を取得する方法
シートの配列からシート情報を取得します。
シートの配列(順番)でシート名を取得するため、シート名に関係なくシート情報を取得することができます。
シートの配列からシート情報を取得するVBAのサンプル事例
サンプル事例として、
左から2番目シートのE5セルに「テスト2配列2」というテキストを入力。左から4番目シートのE5セルに「テスト2配列4」というテキストを入力する
というVBAを作成してみます。
Sub テスト2()
Dim Ash As Worksheet
Set Ash = Sheets(2)
Dim Bsh As Worksheet
Set Bsh = Sheets(4)
Ash.Cells(5,5) = "テスト2配列2"
Bsh.Cells(5,5) = "テスト2配列4"
End Sub
Set 〇〇 = Sheets(△△) 中の△△にシートの配列(順番)を入力してシート名を取得方法です。
実行結果
実行すると下記のような結果になります
左から1番目のSheeにはテキストなし
左から2番目のSheeには「テスト2配列2」が入力
左から3番目のSheeにはテキストなし
左から4番目のSheeには「テスト2配列4」が入力
という結果になりました。
注意事項
シートの配列からシート情報を取得する方法には注意が必要です。
それは、シートの順番を変更するとVBAが思い通りに動作しなくなってしまう!ということです。
「2番目」シートと「Sheet3」シートの順番が入れ替わると、「Sheet3」シートにテキストが入力される。
いろんな方が扱うエクセルファイルでは勝手にシートの順番が入れ替えられてしまう可能性があります。
先ほどのシートの名前からシート情報を取得するVBAでは、シート名が変更されると実行エラーとなり異常に気付くことができます。
しかし、シートの配列からシート情報を取得するVBAでシートの順番を入れ替えられた場合、VBAの実行エラーが発生しないため間違った処理に気づくことができない!とても危険な状態です。
シートの配列からシート情報を取得するVBAを設定する場合、シートの順番を変えるだけで思い通りの処理が行われなくなることを職場の全員が理解しておく必要があります。
開いているシートの情報を取得する方法
使用中のシート情報を取得します。
使用中のシートからシート情報を取得するVBAのサンプル事例
サンプル事例として、
今開いているシートのE5セルに「テスト3アクティブ」というテキストを入力する!
というVBAを作成してみます。
Sub テスト3()
Dim Ash As Worksheet
Set Ash = Activesheet
Ash.Cells(5,5)="テスト3アクティブ"
End Sub
Set 〇〇 = Sheets(△△) 中のSheets△△にActivesheetを入力してシート名を取得方法です。
シートを区別しないで操作中のシートでVBAを使いたい!というエクセルファイルに導入しましょう。
実行結果
実行すると下記のような結果になります。
選択中のシートE5セルに「テスト3アクティブ」が入力される
という結果になります。
注意事項
ここで、Activesheetを使わなくても、開いているシートにテキストを入力することができるのでは?と考える方がいると思います。
下記のようにActivesheetを使わなくてもテキストを入力することは可能です。
Sub テスト3-1()
Cells(5,5)="テスト3アクティブ"
End Sub
Activesheetが必要なときの必要ではないときの使い分けはなんなのかというと、一つのシート内で処理が完結するVBAはActivesheetの宣言は必要ありません。
シートを区別して、いろんなシートへの処理が必要なときに使用します。
なるべくシンプルなVBAにしたいという方は、Activesheetの宣言を省略しても問題ありません。
一番右側にあるシートの情報を取得する方法
最後のシート(一番右)のシート名を取得します。
一番右にあるシートからシート情報を取得するVBAのサンプル事例
サンプルとして、
一番右側にあるシートのE5セルに「テスト4カウント」というテキストを入力する!
というVBAを作成してみます。
Sub テスト4()
Dim Ash As Worksheet
Set Ash = Sheets(Sheets,Count)
Ash.Cells(5,5)="テスト4カウント"
End Sub
Set 〇〇 = Sheets(△△) 中の△△にSheets,Countを入力してシート名を取得方法です。
シートを区別しないで一番右にあるシートでVBAを使いたい!というエクセルファイルに導入しましょう。
職場では、ワークシートを一番右側に新規作成→一番右側のシート名を取得するVBAを使って処理をする!というVBAがよく使われています。そうすれば、シートの名前を変更されたり、シートの順番を変えられても問題なく処理することができます。
実行結果
実行すると下記のような結果になります。
一番右にあるシートのE5セルに「テスト4カウント」が入力される
という結果になりました。
シート名を取得するVBAを使ってできることは
記事の冒頭でも少し紹介しましたが、シート名を取得するVBAを使うと作業効率アップに繋がるいろんなエクセルマクロを開発することができるようになります。
シート名を取得するVBAを使ったマクロ
- シート毎に印刷するVBA
- シート1をコピーするVBA
- シート2とシート3を削除するVBA
エクセル業務の効率を上げようと考えたとき、シート名を取得するVBAの設定は必ずと言っていいほど必要になります。
シート名を取得するVBAを使えばどのようなマクロを開発することができるのかいくつか紹介します。
多機能エクセルカレンダー
エクセルカレンダーでは年間カレンダーシートと週間カレンダーシートのスケジュールを一致させるVBAを設定しています。
エクセルカレンダーではシート名前を変更させることがないので、シートの名前からシート情報を取得するVBAを採用。
動画で紹介しているようなエクセルカレンダー(年間カレンダーと月間カレンダーが別々のシート)を使ってスケジュール管理をする場合、予定の転記漏れは絶対に発生させてはいけません。
例えば、
年間カレンダーを見てスケジュールを組んだあとに月間カレンダーを確認するとすでに大事なスケジュールが組まれている!
という調整ミスが発生してしまいます。
このようなスケジュール調整のミスを防止するために、
シート名を取得するVBAを使って、スケジュール内容を同期するVBA
を設定しています。
エクセルカレンダーにはスケジュールを同期させるVBAの他に3つのマクロを設定。
- 曜日と背景色を自動的に変更するマクロ
- 無駄なスクロールを省略することができるハイパーリンクマクロ
- うるう年にも対応した年度切替マクロ
スケジュール管理をエクセルで行っている方におすすめのカレンダーになっています。
上記の動画で紹介されているエクセルカレンダーは下記のサイトでダウンロードしてお使いいただけます。
設定されたVBAについて詳しくしりたいという方はこちらの記事で詳しく紹介しています。気になる方はチェックしてみてください。
複数のエクセルファイルを1つにまとめるVBA
複数のエクセルファイルを1つにまとめるVBAでは、指定するエクセルファイルにある全てのシートを取得し1つのエクセルファイルに集約する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の勉強を始めようと考えている方は是非参考にしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません