- ベストアンサー
エクセルVBAでのプログラムの意味と使い方についてギモン
- エクセルVBAを勉強中の方がAfter:=.Cells(.Count)の意味と使い方について質問しています。
- After:=.Cells(.Count)は指定したセルの次から検索することを意味します。
- ほかのプログラムと関連しているかどうかや、次のセルを指定する方法についてもわからないという疑問を持っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
解りやすい順序でご説明したいと存じます。 【ギモン2】 [With ステートメント] では、 >指定したオブジェクトに対してオブジェクト名を再定義することなく、 >一連のステートメントを実行することができます。 と [With ステートメント] の ヘルプ に載っておりますように、 With Worksheets("sheet1").Range("A2:A" & Rows.Count) と書いた場合には、「With Worksheets("sheet1")」ではなくて、「Worksheets("sheet1").Range("A2:A" & Rows.Count)」が「.」の前に略されていると考えます。 ですから、「.Cells(.Count)」の意味は、 Worksheets("sheet1").Range("A2:A" & Rows.Count).Cells(Worksheets("sheet1").Range("A2:A" & Rows.Count).Count) ということになります。 【ギモン3】 上記により「.Cells(.Count)」の中の「.Count」の部分が Worksheets("sheet1").Range("A2:A" & Rows.Count).Count であることはお分かりいただけたと存じますが、これは、「sheet1 シート の A2 セル から A列最終行の セル までの範囲の セル の数」、つまり、 Rows.Count - 1 という内容になります。 Excel 2003 まででしたら 65535、Excel 2007 でしたら 1048575 になりますか。 したがって、「.Cells(.Count)」の意味は、 Worksheets("sheet1").Range("A2:A" & Rows.Count).Cells(65535) というような内容になりますが、[Cells プロパティ] の後の引数の部分「65535」は、 [Cells プロパティ] の前にある「Range オブジェクトを返すオブジェクト式」、つまり「Worksheets("sheet1").Range("A2:A" & Rows.Count)」の中で何番目の セル かを意味します。 お示しの例でしたら、「65535 個の セル の中の 65535 番目の セル」、つまり、「A列最終行の セル」ということになります。 【ギモン1】 したがって、「A列最終行の セル」から「検索開始」ということになりましょうか。。。 [Find メソッド] の「After」は >指定したセルの次から検索が開始されます。 >この引数を省略すると、対象セル範囲の左上端のセルが検索の開始点となります。 と ヘルプ に載っておりますように、「範囲の左上端のセル」、つまり A2 セル を飛ばして検索を開始しますから、「A2 セル」を検索対象の第一に考えたい場合には、「After:=.Cells(.Count)」というようなまどろっこしい書き方をしなければならない、ということになります。 くどくどしいご説明はこれぐらいにして、後は、[With ステートメント]・[Cells プロパティ]・[Find メソッド] の ヘルプ をご覧ください。 なお、VBE の コードウィンドウ において、「With」・「Cells」・「Find」のところに マウス を当てて、[F1] キー を押下すると、当該の ヘルプ が開きます。
その他の回答 (1)
- nattocurry
- ベストアンサー率31% (587/1853)
>ギモン1 >上記のプログラムですが、あるプログラムの一部分です。(1)のAfter:=.Cells(.Count), はどういう意味なのでしょうか。 >afterは指定したセルの次から、という意味と書いてありました。 そのままの意味です。 Findメソッドは、After:= を指定しないと、A1から順に探し始めます。 検索したいものが複数あって、2つ目を検索する場合は、最初に見つかったセルを After:= に指定すると、最初に見つかったセルの次から探し始めるので、重複しません。 3つ目を検索するときは、2つ目に見つかったセルを After:= に指定します。 そして、すべて見つかると、最初に戻ります。だから、最初に見つかったセルを記憶しておいて、それと一緒になったら、もう無い、と判断します。 >ギモン2 >=.Cells(.Count),cellsと.countの.は(2)の With Worksheets("sheet1")と関連性があるのでしょうか。 With のことを調べましょう。 この場合、With Worksheets("sheet1").Range("A2:A" & Rows.Count) の内側にあるので、.count は Worksheets("sheet1").Range("A2:A" & Rows.Count).count という意味です。 >ギモン3 >.Cells(.Count),どうやって次のセルを指定しているのでしょうか。 解りません。 このコード、正しいですか? 希望通りに動いていますか?
お礼
ご丁寧におへんじありがとうございました >>くどくどしいご説明はこれぐらいにして、・・・そんなことはけっしてございません。ここまで書いていただいてよく分りました。私はここに質問する前には、ヘルプとネットは調べる、似たようなコードの意味をネットで検索する、など一通りのことはしてから、でも分らない、コマッタ、という時(ばかりで困っているのですが)にお願いしております。 今回も・・・ヘルプでは理解できずお願いしました。 また見かけたら、このような状況だと思って助けてやってください。よろしくお願いします。