セルを扱う時はファイル名・シート名も指定

当サイト「えくとしょ」や多くの参考書でも、セルの値を調べたり、セットする時にRangeでセルの位置だけを指定してプログラムしています。

でもキビシイ見方をすると、
「セルの位置は指定しているけど、ファイルとシートは指定していない」
ということです。

その結果、このRangeだけでセルを指定したプログラムを実行すると、アクティブなシートのセルが対象となります。(アクティブなシートとは、パソコン画面の1番手前に表示されているシート)
でもプログラムを実行中にユーザがシートをクリックすると、アクティブなシートは変わる危険性があります。

今回はこのような危険性をなくすために、対象ファイルとシートを指定する方法を説明しています。今後セルを操作する時は、この方法でプログラムを書くようにしましょう。

セルのファイルとシートの指定方法

Workbooks(“ファイル名”).Worksheets(“シート名”).Range(“○○”)

※ファイル名・シート名はダブルクォーテーションで囲む

 

たとえば「セル練習.xlsm」ファイルの「Sheet1」シートの「A1」セルの場合は、次のように書きます。

Workbooksでファイルを指定

Workbooksは、開いているエクセルファイルの集まりです。そのため、最後に複数形のsが付いています。

「Workbooks(“ファイル名”)」と書くことで、「開いているエクセルファイルの中の、このファイル」という意味なります。

ファイル名を指定する時の注意点ですが、.xlsxや.xlsmなど拡張子まで指定します。まだ保存していない新規のエクエルファイルを指定する時は、拡張子がわからないので「Book1」などファイル名だけになります。

注意すること

開いていないエクセルファイルを指定するとエラーになります。

 

Worksheetsでシートを指定

Worksheetsは、1つ前のWorkbooksで指定されたファイルの中にあるシートの集まりです。そのため、最後に複数形のsが付いています。

「Worksheets(“シート名”)」と書くことで、「シートの集まりの中の、このシート」という意味なります。

注意すること

対象のファイルに存在しないシートを指定するとエラーになります。

 

ファイルとシートを指定してない時・した時の違い

「ファイル・シート名をする理由がよくわからない・・・」となっている人もいると思います。

せっかくなので、ファイル・シートを指定しない時・した時のプログラムを作って実際に動かしてみましょう。

プログラムを作成する前の準備
  • 新しいエクセルファイルを作成する
  • ファイル名を「セル練習.xlsm」で保存する
  • 「セル練習.xlsm」にシートを追加する(Sheet1とSheet2がある状態)
  • Sheet2を選択して、Sheet2を表示した状態にする

 

次のプログラムは、どちらもA1セルに文字をセットするプログラムです。

ファイル・シートを指定してないVBA

実行後は、Sheet2のセルA1に「えくとしょ」と書き込まれてしまう。

その時、アクティブになっているシートが処理の対象となる

 

ファイル・シートを指定したVBA

実行後は、Sheet1のセルA1に「えくとしょ」と書き込まれる。

どのシートがアクティブになっていても、指定したシートが処理の対象となる

 

オブジェクト変数を使って見やすく書く

ファイル名・シート名を指定するプログラムを見て「プログラムが横に長くなって見にくい・・・」と思わなかったですか?

見やすくするテクニックとして、オブジェクト変数を使った書き方があります。

変数については「変数の基本|宣言の書き方・使い方」で、文字型(String)と数値型(Long)の2つの方を説明しました。この変数は、文字や数値などの値を保存するものです。

今回のオブジェクト変数は、部品自体を保存する変数です。普通の変数に文字型(String)と数値型(Long)があるように、オブジェクト変数には、ワークシート型やセル型など保存したい部品に対応した型があります。

また、普通の変数と違い、保存する時にプログラムの先頭にSetと付けます。

Set オブジェクト変数 = 部品

ここでは、オブジェクト変数について細かく理解する必要はありません。「こんな書き方があるんだなぁ。見やすくていいな」くらいの感覚で真似をして使ってください。

実際に、さっきのセルA1に文字を書き込むプログラムを、オブジェクト変数を使って見やすくすると、次のようになります。

今回はRangeが1カ所しかないプログラムのため、「行数が増えただけでメリットないじゃん」と感じるかも知れません。
でも、実際のプログラムでは何回もRangeが出てきます。その時、このオブジェクト変数の使い方を知っていれば、すべてのRangeの箇所が短く見やすいプログラムで表現できます。

このオブジェクト変数のテクニックは、早い段階でマスターしておきましょう!

 

まとめ

  • セルを操作する時は、どのファイル・どのシートか指定する
  • オブジェクト変数を使うことで見やすくする

 

関連記事

初心者のためのエクセルVBA超入門講座
VBAおすすめ本
エクセルVBAおすすめ本|実際に読んだ本を目的別に紹介
成果を出す5つのポイント
VBA超入門
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました