「Excel」VBAでシートオブジェクトの記述コードを短くする

こんばんは、こんにちは、おはようございます。( ノ゚Д゚)おやすみなさい! とっちーです。

本日は、VBAでオブジェクト型のWorksheetの基本設定についてお話いたします!

設定方法もいろいろありますが、注意しないと”が~んっ”ってなっちゃうかも。

それはどんなものなのか!ワクワクしながらみてね。

 

 

オブジェクト型の変数ってなに?

 

そもそもExcelVBAでオブジェクトとは何かと頭をよぎったときには、Workbook(ブック)・Worksheets(ワークシート)・Range(セル)など主な3つの操作される側と覚えておきましょう。

 

この3つを代入するためにつくられた変数のことを「オブジェクト型変数」もしくは「オブジェクト変数」といいます。

 

オブジェクト型の変数を宣言する方法!

 

オブジェクト型の方の種類

固有オブジェクト型と総称オブジェクト型の2種類があります。

 

総称オブジェクト型は、Objectで宣言をします。objectで宣言された変数は、ブック・シート・セル・図形などすべてのオブジェクトを宣言できます。

 

一方固有オブジェクト型は、Workbook・Worksheet・Rangeなどのような決められた範囲のオブジェクトをさします。

Rangeで宣言したオブジェクト変数にはRangeオブジェクトのみが扱える変数になりますのでシートやブックを扱うことは出来ません。

 

シートはWorksheetをブックはWorkbookを図形はShapeと与えられた固有のオブジェクトで宣言をしましょう。

 

構文

 

Dim 変数(←わかりやすい名前がいいな) As  オブジェクト型になります。

変数の名前は、誰が見ても何の変数か判断できる名前にしましょう。

 

objectで作成すると便利かもしれませんが、一目でわかる宣言がわかりやすくて便利かもしれません。

 

オブジェクト型の変数の使用例

 

ワークシートを変数に宣言してみる。

変数を宣言して変数にオブジェクトをセットするときは、VBAで使用するExcelのシートの名前の確認をしておきましょう。

 

 

シートの名前の部分は、空白文字がある場合もあります、あと全角もしくは半角など見間違える場合があります。

「なぜうごかないんだ~」って騒がないようにしておきましょう。

「うごけ、うごけ」っていっても無理です。名前が違っていたら無理です。

 

なので転記する際は最新の注意を払いましょう。コピペがいいかもしれません。

 

※コピペとは、コピーアンドペーストの略語です。

ちなみに上図のシートの宣言方法です。

 

Dim ARARE As Worksheet

Dim SEMBEI As Worksheet

Dim NORIMAKI As Worksheet

 

そしてオブジェクト型を変数に代入する際には、

構文

Set 変数 = オブジェクト(セットする対象のオブジェクト)になります。

 

上図のシートをセットする場合のオブジェクトの記述方法になります。

まずオブジェクトは次のようにコードを記述します。

 

Worksheets(“あられ”)

Worksheets(“せんべい”)

Worksheets(“のりまき “)※ は空白文字になりますのでシート名を直してコードを作成するか、シート名にあわせてコードを作成するかを決めましょう。

では、構文で変数にオブジェクトをセットしてみましょう。

 

Set ARARE =Worksheets(“あられ”)

Set SEMBEI =Worksheets(“せんべい”)

Set NORIMAKI=Worksheets(“のりまき”)※コードを綺麗にしたい場合は、シートの名前を修正しておきましょう。

 

上記で変数にオブジェクトをセットすることが出来ました。

ちなみに他にもシートオブジェクトを代入する方法はありますが・・・・。

 

シートの名前以外で登録する方法

 

表示されているシートの順番に変数へセットする方法の説明になります。

VBAを起動!

実は、シーとの名前以外で変数にセットする方法は他にもあります。

 

 

 

VBAを起動してみましょう。キーボードの「Alt」キーを押しながらファンクションキー「F11」を押してみましょう。VBAのアプリケーションが起動します。

 

次にプロジェクトウインドウの①VBAProject()を右クリックしましょう。選択メニューが表示されます。

 

その中の②挿入(N)を選択して左クリックして③表示されたメニューの中の③標準モジュール(M)を選択して左クリックしましょう。

 

コードウインドウが表示されます。

 

コードウインドウの確認

 

③コードウインドウが表示されますので、①プロジェクトウインドウと②プロパティにオブジェクト名などが表示されていることを確認しましょう。

 

コードウインドウにプロシージャ名を記述する

 

今回はPrivate sub 名前()とコードを記述しています。

Private sub 名前()でプロシージャを作成すると、その中のモジュールの中で動作するプロシージャになります」

ちなみにSub 名前()のSubで始まるプロシージャは、「Public 」プロシージャとなり「Private」と違いすべてのモジュールから動作させることが出来るプロシージャになります。

簡単に説明するとアローンかシェアかです。出来るだけ記述するように心がけましょう。私も略す癖があります。

 

 

① Private subから記述してみましょう。Subでも大丈夫です。②プロシージャ名を記述しましょう。判りやすくしましょう。

③()まで記述できたら、キーボードのENTERキーを押してみましょう、End Subが自動的に記述されます。処理プログラムを記述するときは、Private sub 名前()とEnd Subの間に記述します。

 

シート名を変数にセットしてメッセージボックスで表示するコードを記述してみる

 

シート名をメッセージボックスダイアログを使用して表示させるプロシージャを作成してみましょう。

 

 

①変数の宣言をしましょう。まず、シートネームの記述を減らすために、オブジェクト型で変数宣言をしましょう。ワークシートはWorksheetのオブジェクトを宣言します。変数名を決めて宣言をしてみましょう。

 

②オブジェクトを変数に代入する場合は、Set構文を使用して代入します。その際ワークシートネームを使用しなくても代入することが可能です。※注意あり

 

③Msgbox を使用して変数に代入したシートネームの表示をさせるコードを記述しましょう。

 

④コードの記述が終わったり途中で終了する場合などを含め、プログラムを実行する際は必ず、こまめに保存することをいたしましょう。プロシージャが暴走すると、前回保存した場所以降の記述には決して戻りません。

 

コードを実行して動作確認をしてみましょう。

 

実行する際はメニューから選択していく方法もあります。

 

今回は省略して動かせたいプロシージャのSub~End Subの間にカーソル(入力可能な状態の点滅しているもの)を表示させてプログラムを動かせてみましょう。

 

 

プログラム(プロシージャ)を動作させる場合はVBAのツールバーのなかにある②若しくは③のマクロの③実行ボタンを左クリックしましょう。

 

④メッセージボックスのダイアログが表示されます。シートと見比べながら「OK」ボタンを押してみましょう。

 

向かって左側からのシートの並び順にメッセージボックスが表示されているのが確認できます。

 

 

 

シートを並び替えて同様にプロシージャを実行して見ましょう。

結果は同様にシートの左側から表示されたことが確認できると思います。

Set構文でワークシートを代入する際に記述したコードをみてください。

 

最初にご説明させていただいた名前を固有化した変数に代入した方法Set ARARE =Worksheets(“あられ”)と違う方法になります。

 

Dim WH1 As Worksheet
Dim WH2 As Worksheet
Dim WH3 As Worksheet

Set WH1 = Worksheets(1)
Set WH2 = Worksheets(2)
Set WH3 = Worksheets(3)

 

まず変数宣言は、固有の名前を使用せず単に順番の入れ物が判るように変数にしてみました。

そして変数に代入する場合に使用したオブジェクト名をご確認ください。

 

Set WH1 = Worksheets(1)

Worksheetsのあとの()に数値が入っているのが確認できるかと思います。

 

この数値が、先ほどの表示されているExcelのシートの左側からの順に相当します。

この記述方式でコードを作成する場合は、シート固有の名前を代入するのではなくシートの順に代入することを覚えておきましょう。

シートの順番が変更された場合には、シート内容が破壊されることを念頭にしようしましょう。

 

まとめ

 

今日は、シートオブジェクトの代入方法についてお話をしました。

 

代入方法も色々ですが、シートの名前の空白に悩まされて”オブジェクトがありません”!って言われたくないですよ。パソコンに!

そんな

VBAでコードを作成するときにシートの名前に空白はいりませんよって、シートを作った誰かさんに吠えたいです。わんわん。

やっぱし、いつも同じだけどシートオブジェクトさん、よろしくって思いながら作ってみると、案外うまく出来るかも。