Set命令?で扱う特殊な変数 ← これを使うとプログラミング技術が飛躍的に向上! | 50歳からのエクセルプログラミング

50歳からのエクセルプログラミング

ブログでお伝えしたい事は、プログラムを使うと著しく業務効率が上がると言う事です。興味がある方はプログラムを動かしてその素晴らしさを体感して下さい。無限の可能性を秘めたプログラミングの世界をご紹介して参ります。

 Set命令?で扱う特殊な変数をご説明します。

hiro-yukioのサイトより「特殊な変数(複数ブック取扱時に便利).xlsm」をダウンロードして下さい。Module 1の「Sub 特殊変数使用でテストデータをシート3に複写する()」を見ながら次の説明文をご覧下さい。

 

 特殊な変数について概要をご説明します。何が特殊かと申しますと、特殊変数はブック、シート、セル範囲が代入?出来る様に作られています。それは、数値や文字を代入する変数とは明らかに性質が異なるものです。「代入?」と言う表現を使っていますが、ブック、シート、セル範囲に「名前を付ける」と言った方が解りやすいと思います。

 下図でご説明します。AドライブのA1セルには「A」と言う名前を付けます。同様に BドライブのA1セルには「B」と言う名前を付けます。(例として一つのセルを指定しているだけです。状況に応じて、ブック、シート、セル範囲を指定します。)
 AドライブのA1セルには「いろは」の3文字が入っています。BドライブのA1セルには「abc」の3文字が入っています。Aドライブ、Bドライブ両方のA1セルの文字列を結合して、Cドライブの新ブックのA1セルに書き込みたいとします。「はっきり明示」だと、ドライブ名、ブック名、シート名、セル範囲をきっちりと記述する必要がありますが、それぞれのA1セルに「名前」をつけておくと、
 ドライブ名、ブック名、シート名、セル範囲をその都度指定する必要がなくなり、イメージとしてですが、C=A+Bと言う発想で、結果として「名前C」には「いろはabc」の文字列が入ることになります。

 具体的なプログラムの書き方をご説明します。
Module 1の「Sub 特殊変数使用でテストデータをシート3に複写する()」を併せて見て下さい。特殊変数の宣言 と Set命令文? の組み合わせで下表「サンプルデータ1」の赤枠のセル範囲に 「名前」を付けることが出来ます。この場合は、「コピー側セル範囲」とつけています。具体的な記述は下記の赤枠内(プログラム内の記述)を見て下さい。
サンプルデータ1
 まとめとしまして、変数宣言と型指定、「名前」の付け方(Set命令文?で名前をつけると考えて下さい)についてご説明します。

 構文は Dim 変数名 As 変数の型 となります。
 変数の型はシート、ブック、セル範囲のいづれを使用するかによって、下記の例の様に Worksheet Workbook Range を使い分けます。

シートの変数宣言と名づけ例: → 開いているシート("Sheet1")の「名前」は ワークシート です。
 Dim ワークシート As Worksheet
 Set ワークシート = ActiveWorkbook.Worksheets("Sheet1")

ブックの変数宣言と名づけ例: → 開いたブックの「名前」は ブック です。
 Dim ブック As Workbook
 Set ブック = Workbooks.Open("C:\" & 対象ブック名) 

セル範囲の変数宣言と名づけ例: → 1行1列から11行8列の範囲の「名前」は セル範囲 です。
 Dim セル範囲 As Range
 Set セル範囲 = .Range(.Cells(1, 1), .Cells(11, 8))

余談ですが、このSet命令?が何を意味しているのか、書物やインターネットで調べることにより、私は何とか理解できましたが、最初は何を言っているのか(書かれているのか)全く解らない状態でした。おそらくエクセルプログラミング言語の開発者がブック間、シート間、セル範囲の指定、「はっきり明示」をWith文(上記 Module 1の抜粋参照)で処理出来る様に開発したものではないかと私は考えています。

 次回は、エクセルプログラミングの謎の動作を行う一つである、ある特定のフォルダーに入れたファイル(ブック)を順番に開く方法をご説明予定です。お楽しみに。
 

読者の方へ。過去の記事をご覧になられていて、「画像」が上手く表示されない場合は、「hiro-yukioのサイト」の「過去のブログ記事」フォルダーにPDFで保存しましたのでこちらでご覧下さい。

hiro-yukioのサイト