tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^9: Excel処理の繰り返しでNG
投稿日: 2010/02/20(Sat) 18:26
投稿者魔界の仮面弁士
>     Set xlSheet = xlBook.Worksheets(1)
> これを記述した段階でアクティブになってしまうのかな?
変数に Set しただけでは、アクティブなシートは切り替わりません。

> そのシートを扱うときには入れるものと覚えてしまったので、無意識に入れてます。
多くの場合、シートを操作する際にシートをアクティブにする必要は無いはずです。
無闇に利用するのではなく、「選択状態にしないと操作できない場合」などの
明確な目的がある場合にのみ使う事をおすすめします。

Activate/Select すると言うことは、そこでフォーカスの切り替えが発生するため、
その分処理効率も落ちますから。(ループ中などで複数回アクセスする場合は特に顕著)


> > > Set xlSheet = xlBook.Worksheets("Sheet1")
> > > With xlBook.Sheets(2)
前者 [Worksheets] は「ワークシートのみ」が対象で、
後者 [Sheets] は「ワークシート以外のシート」も対象になります。
(マクロシートや、グラフシートなど)

> シート名を明確にして宣言したものが上。やはり仕様が違うのでしょうか?
上記のように、Worksheets と Sheets の仕様は異なります。ただし、
名前指定と番号指定の事を指しているのだとしたら、それらは機能的には同一です。

番号指定が良いか名前指定が良いかはケースバイケースなので、
適宜、使い分けていくことになるかと思います。

たとえば、新たなシートが挿入されたり、あるいは既存の不要なシートを
削除したりすると、それ以降のシート番号がずれますよね。
または、ユーザーがシートの順番を変えることもあるかも知れません。
そのような場合でも、.Worksheets(3) ではなく .Worksheets("Sheet3") とすれば
目的のシートを正しく操作できます。

一方、シートを .Copy した時などは、コピー後の新シートを得るために、
番号(Index)が必要になってくるかと思います。


> 実は、"Sheet1"をコピーする前に、シートの名前を変更しております。
>     xlBook.Sheets(1).Name = "Test1-"
>     xlSheet.Copy After:=xlBook.Sheets(1)
上記の「xlSheet」変数の中身は何ですか?
Worksheets でしょうか。それとも Worksheet でしょうか?
シートだとしたら、それは Sheets(1) でしょうか? Sheets(1) 以外でしょうか?

変数の中身が分からないので、何をどこにコピーしようとしているのか
読み切れませんでしたが、プログラムの途中で番号や名前が変化する場合には、
 Set xlSheet1 = xlBook.Worksheets("Sheet1")
 Set xlSheet2 = xlBook.Worksheets("Sheet2")
 xlSheet2.Name = "Test1"
 xlSheet1.Copy After:=xlSheet2
のように、あらかじめ変数に Set しておき、それを使った方が混乱が少ないかと。


> 途中で名前を変えてしまう様な時には、Set xlSheet = xlBook.Worksheets(1)
> こちらの方が宜しいのでしょうか?
どちらでも良いとは思います。ただ、名前を変更する場合に限らず、そのシートを
繰り返し呼ぶ場合には、変数を用意した方が便利だとは思います。

たとえば xlBook.Worksheets(1) というコードは、
 ・変数 xlBook は、Workbook オブジェクトである。
 ・Workbook オブジェクトの Worksheets プロパティから、Sheets オブジェクトを取得。
 ・Sheets オブジェクトの 既定のプロパティから、Worksheet オブジェクトを取得。
という段階を経て、Worksheet オブジェクトを得ますが、xlSheet に格納しておけば、
このプロパティ呼び出しを省略できるため、ループ回数が多い場合には有効です。
(もっとも、数回程度の呼び出しなら、その都度 .Worksheets から得ても大差ありません)

この他、変数に入れると IntelliSense (入力候補)を活用できるメリットもあります。
たとえば、「xlBook.Worksheets(1).」と打った場合には、入力ヒントが出ませんが、
「xlSheet.」と打った場合には、入力ヒントが利用できるというメリットがあります。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。