晃2019/3/132019/6/26VBAでシートをアクティブにしたいんだけど、なんかエラーが出る...エラーの意味がわからない...こんにちは。Excelを使い始めて20年ちょっと。仕事のほとんどでExcelを使ってきたベテランExcel使いこと、テックライターの平山です。VBAに関するこの記事を読んでいらっしゃる皆さんのこと、きっとExcelをつかったスキルアップや作業効率化のために、シートのアクティブ化が必要になっているはずです。多くの場合、実用的かつ複雑な処理ではシートは当然のように複数存在します。そのため、VBAでシートをまたいだ操作をしたい場合、アクティブ化ができないと話になりません。普段あまりプログラミングに慣れていないと対応が難しいのがエラーが発生したときです。この記事では普段はプログラミングとはあまり縁がないけれど、VBAを使って効率を上げたいあなたのために、エンジニア寄りではない、普通の言葉とスモールステップでシートのアクティブ化とエラー発生時の対応を解説します。エラー対応を一通り習得できれば、VBAのシート操作に自信を持てるようになるでしょう。オブジェクトは、このプロパティまたはメソッドをサポートしていません。ブロック変数が設定されていません。まとめVBAでシートをアクティブにする方法この章ではシートをアクティブにする具体的な方法を紹介していきます。下のようにWorksheets("シート名").Activateとすることで、シート名のシートをアクティブ化できます。Subシート名の部分はインデックスで置き換えることも可能です。インデックスは各シートに連番で振られている番号で、最初のシートから1,2,3・・・となります。上のサンプルをインデックスで書き換えると次のとおりです。Subシート名と違い、インデックスの場合は数値型なのでダブルクォーテーションで囲まない点に注意が必要ですね。ここからは少し応用的な使い方です。ワークシートオブジェクトを生成して、操作したいワークシートをセットする方法を紹介します。これは、シート名が長いなど、何度も入力するのが煩わしい際に有効な方法です。シートを変数に格納してしまうようなイメージでしょうか。書き方は以下のようになります。'まずシートを格納するためのWorksheetオブジェクトを定義します。'オブジェクトへの格納にはSetを用います。Subここでオブジェクトという専門用語が突然出てきました。オブジェクトについてきちんと理解しようとするとわりと沼にハマることがあるので、初心者のうちは次のように具体的な対象を覚えておくほうが簡単です。セルやワークシート、ブック、RangeなどVBAで操作できるものオブジェクトはVBA以外のプログラム言語を習得する際も壁になる、なかなか厄介な概念です。深入りしすぎてドツボにはまらないよう、お気をつけください。シートのアクティブ化についてより深く学びたい方はこちらの記事もご参照ください。こちらはメソッドを使ってアクティブ化に重点をおいた記事。2019年5月16日こちらはアクティブ化したシートをどのように操作するかに重点をおいた記事になっています。2019年4月22日エラー対策の概要これ以降の章ではエラーが発生したときの原因と対処法を紹介していきます。エラーが発生したときの心構えです。マイクロソフトの製品にありがちなことですが、多くの初心者にとって、エラーの説明文から実際の問題を類推するのはとても難しい問題です。学習が進みいろいろな部分の理解が深まれば、確かに正しくエラーで問題点を指摘しているのがわかるのですが、はじめのうちは意味がさっぱりわからないことがほとんどでしょう。正確性は落ちますが、まずはこのエラー番号のときはここを確認する、という方法論を覚え、実際に使いながらエラーの内容を理解できるようになっていくのが初心者にとってやりやすいのではないかと思います。それでは早速、よくあるエラーとその解決策を見ていきましょう。オブジェクトは、このプロパティまたはメソッドをサポートしていません。人によっては割とよく見かけるのがこのエラーではないでしょうか。これは主にメソッドのスペルミスの際に表示されるエラーです。以下のサンプルは438エラーが生じます。Sub正しくは以下のとおり、ActiveではなくActivateですね。Sub高性能な補完機能のついたエディタに慣れてしまうと、こういった部分でミスタイプすることが結構増えてきます。具体的な対処法は注意することぐらいしかできませんが、438エラーが出たらスペルミスを疑ってみましょう。ブロック変数が設定されていません。できることが増えてきて、応用的な方法を試してみよう、と思ったあたりで遭遇しやすくなるのがこちらのエラーです。主な原因はオブジェクト変数に値を代入する際にSetを書き忘れていた場合です。下のサンプルは91エラーが生じます。Subオブジェクト変数に値を代入する場合、普通の変数と異なりSetステートメントが必要になります。この点をうっかり忘れてしまうことが多く、オブジェクト変数を多用する場合にはよく遭遇するエラーになりますね。エラーの出ないサンプルはこちらになります。インデックスが有効範囲にありませんシートをアクティブ化するときに初心者も経験者も遭遇するのがこちらのエラーです。主な原因はアクティブ化したいシート名の書き間違いですね。こちらもVBAの自動補完の効かないエディタでは、よくあるエラーです。9エラーを出すサンプルは下のようになります。Sub正しいサンプルはこちらですね。Subこのように、9エラーが発生した場合は逐次書き直すことが必要です。それ以前の問題として、見分けがつきにくかったり、取り回しが悪いシート名・変数名を使うべきではありません。理想は自分以外の人が見てもすぐに意味が理解でき、使うことのできる変数名です。ココらへんはプログラミングの言語を問わない、読みやすいコードの話になってきます。大規模なプログラムを開発する予定のある人、複数人でコードを使い回す必要がある人は言語そのものの勉強とは別に、読みやすいコードの書き方も学んでおくと後々役に立つでしょう。今回はVBAでシートをアクティブ化する基本的な方法かよくあるエラーの対策方法までをご紹介しました。今の時代、大体のエラーに対するわかりやすい対処法はネット上に公開されています。プログラミングを学習していく中でいろいろなエラーに遭遇するかと思いますが、自分に合ったわかりやすい解説を探しつつ、じっくりエラーと向き合っていっていただければ、と思います。この記事が皆様のエラー解決の一助となれば幸いです。お相手はExcelと付き合い始めて20年、今も裏でサブPCにOfficeをインストール中の平山でした。TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。晃フリーのエンジニア・ライター。プログラミング、ライティング、マーケティングなど、あらゆる手段を駆使して、ハッピーなフルリモートワーカーを目指し中。最近興味がある分野は深層強化学習。積みゲー、積ん読がどんどん増加しているのがここ数年の悩み。実は侍エンジニア塾の卒業生だったりします。