3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

VBAでのFor Each構文利用上の注意。

2010年7月13日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

今日は、さきほどのブログでご紹介した粟屋さんからの、メールセミナーへのフィードバックから。

もともとかなり書ける方だけあって、いただくメールの内容がとても興味深いです。

オブジェクト番号とオブジェクトの対応は一般的には公開されていないもののようですが、Worksheetsについては、Microsoft が公にしているかどうかは別として、さまざまな参考書でも、左から1,2,3・・・のようです。

私もこれを信じて作成して、今までトラブルにあったことがありません。

ですので、後ろへ後ろへとワークシートを増やす場合、たいていCountプロパティを用いて、下記のように書いています。

Sub MyMacro()
    Dim i As Long
    Dim lngE As Long
    lngE = Worksheets(“main”).Range(“B65536”).End(xlUp).Row
    For i = 2 To lngE
        Worksheets(“main1”).Copy after:=Worksheets(Worksheets.Count)
        Worksheets(Worksheets.Count).Name = Worksheets(“main”).Range(“B” & CStr(i)).Value
    Next i
End Sub

ForEach構文は、仕様としては、インデックス番号順にオブジェクトを拾ってくることは保証されていません。
いちおうその点については注意が必要です。

とはいえ、実質的には、インデックスと対応しているようですね。

他の言語に慣れていると、コレクション内のオブジェクトをいつも同じ順番で返してくれるVBAのForEach構文は、かえって気色悪いです。。

以前、「.xlsのファイル内の同一テンプレートで作られたシートの内容を基にして、所定の順番で互いにリンクされた複数のHTMLファイルを作る」といった仕事を部下にさせたことがあります。

そのとき、ForEach構文を使っていたので、注意し、ForNext構文でCountプロパティを利用するよう促しました。

もっと詳しい解説もしたいのですが、またこのへんで。

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド