シート名を取得する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の勉強を始める前は上記の方法で効率化マクロを導入していました。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。
マクロの開発を外注に依頼する
マクロの開発を外注に依頼する導入方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。
たとえば、
A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、
『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。
実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

ガッツポーズの人
『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、
VBA初心者でもマクロを導入できる、費用が安い、
というメリットがあります。
しかし
VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい処理を実現するコードを書くだけ
です。
【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。
ディスカッション
コメント一覧
まだ、コメントがありません