「activesheets.copy」
「activesheets.name」
「for each shp in activesheets.shapes」
「マクロ activeworkbook.activesheets.sort.sortfields.clear」
という、気になる検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
気になったのは「ActiveSheets」という単語です。
ActiveSheetsという名前のプロパティやオブジェクトは存在しない
VBE(Visual Basic Editor)のオブジェクトブラウザーで、「activesheets」を検索すればわかるとおり、
「ActiveSheets」という名前を持つプロパティやオブジェクトは存在しません。
「activesheets.copy」
「activesheets.name」
「for each shp in activesheets.shapes」
「マクロ activeworkbook.activesheets.sort.sortfields.clear」
といった検索をした方の中には、単なるタイプミスの方もいらっしゃるのでしょうけれど、本気で「ActiveSheets」が存在すると考えていた方もいらしたように思います。
ActiveSheetとWindow.SelectedSheets
Excel VBAで、アクティブなシートを表すオブジェクト(WorksheetオブジェクトまたはChartオブジェクト)を返すのは、ActiveSheetプロパティです。
アクティブなシートというのは必ず1枚ですから、単数形のActiveSheetという名前が付けられています。ActiveSheetsではありません。
選択されている複数のシートを表すコレクションを返すのは、WindowオブジェクトのSelectedSheetsプロパティです。
選択されているシートは複数の可能性もありますから、SelectedSheetsという複数形の名前が付けられています。
自然言語とプログラミング言語の違い
我々が普段の生活で使う自然言語は、新しい単語が自然発生的に生まれるのが普通です。
例えば、「自撮り」という単語を誰が最初に使ったのか知りませんけれど、スマホが普及してから一般的になった単語です。
例えば、英語で「google」という単語を動詞として使うことが特殊ではなくなったのは、IT系のお仕事をしていない方も、Googleを使うようになってからのはずです。
自然言語では、自然に新しい単語が生まれることや、いつの間にか既存の単語が別の使われ方をするようになることは、よくあることです。
これに対して人工言語の一種であるプログラミング言語では、そのようなことは決してありません。
新しい単語が生まれるときには、必ず、誰かがその単語が表す、機能などを作っています。
Excelを自動的に処理するExcel VBAの世界では、オブジェクトに関する新しい単語を作るのは、絶対にMicrosoftです。
Microsoftが、Excelに新しい機能を加え、その機能を表すオブジェクトをVBAから操作できるようにしてくれたときに、新しい単語が登場します。
それ以外に、オブジェクトに関する単語が誕生することは、あり得ません。
ActiveSheetがアクティブなシートを表すオブジェクトを返すプロパティだからといって、勝手にActiveSheetsと入力したところで、選択されている複数のシートを表すオブジェクトを取得できるということはありません。
デフォルト状態のExcel VBAの世界では、Microsoftが作った単語しか使うことはできません。
そして、我々が扱えるオブジェクトに関する、すべての単語を教えてくれるのが、VBEのオブジェクトブラウザーです。
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » ActiveSheetsというプロパティやオブジェクトは存在しない