ExcelVBAのセルの選択でドはまりした話

VBAを操作していたらかなりハマったので、その内容と解決策を書きます。

困った内容

「管理画面」シートを変更した直後にセルA5を選択するという単純なVBAを作りました。

Worksheets(“管理画面”).Select

Range(“A5”).Select

そしたら、「Range(“A5”).Select」でエラーが出るんです。
全く同様の方法で記述した他のプロシージャは動いているので、ちょっとよくわからなくなったのが始まります。

試した内容

まず、シートを選択するのとアクティブにするのは違うということを知りました。(初めて意識しました)
選択はSelectで、選ぶということです。ということは1つのシート選ぶこともできますし、複数シートを選ぶことができますね。
アクティブはActiveで、このシートを使うんだ、アクションを起こすんだと意思表明をすることで、これは1つのシートにしか設定できません。
この選択とアクティブの違いがごっちゃになってました。
それが原因かなと思って、次のようにしてみました。

Worksheets(“管理画面”).Activate

Range(“A5”).Select

これでもエラー。

解決

どうやら、RangeのSelectはシート指定をしないと、あちこちのシートを見ているプロシージャだとエラーになるのかなという感じだったので、次のようにシートを指定することにしました。
Worksheets(“管理画面”).Activate

Worksheets(“管理画面”).Range(“A5”).Select

ちょっと前までは、「Worksheets(“管理画面”).Range(“A5”).Select」の1行だけで、他のシートからでも管理画面のセルA5を選ぶはずだと思っていて、実際にやってみたらエラーだったので、シートを選択、その後Rangeの選択の2行に分けるのがルールだと思い込んでいました。
でも、そうじゃなくて、Rangeの選択の前に、シートが選ばれていることが絶対条件で、セルを選択するには、シートから指定しないと安定しない、ということだったのですね。

まとめ

今回は、VBAのオブジェクトの選択について、あらかじめ選択できる状態にしておくことが必要だということ、RangeのSelectはRangeだけではなくWorksheetsも指定するほうがいい、ということを覚えました。

サトウヨシヒロ

Excelを中心としたMicrosoft Officeの魔法使い。
仙台市在住のフリーランスのパソコンインストラクターです。
1969年1月生まれ。
Excelを黎明期から30年近く使っています。Wordも使えます。
出版社様と一緒にExcelの情報発信もしています。
最近は羊に夢中です。
2019年はRPAと業務効率化を勉強しています。

Twitterでも業務で使える便利なOffice技をめっちゃつぶやくツイッタラーです。@yosatonet

1件のコメント

  1. そもそもなんでセルをselectする必要があるんですか?ユーザーに処理中のセルを教えるため?ちょっと意味がわかりません。

コメントを残す

メールアドレスが公開されることはありません。