前回は、オブジェクトを繰り返し処理する手を紹介しました。
今回も同じような事をしてみましょう。
ただ、少しだけ変えてみます。
繰り返しながらオブジェクトの処理をするのではなく、処理したいオブジェクトを先に取得して、あとから一気に処理する方法です。
以下は、Sheet1***という風に「Sheet1」で始まる名前のシートだけをデバッグウィンドウに表示します。
たとえば、Sheet1, Sheet12 なんてのですね。
Option Explicit Const PRE_SHT = "Sheet1" Function getSheets() Dim shts() As Variant Dim sht As Worksheet Dim no As Integer no = 0 ReDim shts(1 To Worksheets.Count) For Each sht In Worksheets If (Left(sht.Name, Len(PRE_SHT)) = PRE_SHT) Then no = no + 1 Set shts(no) = sht End If Next sht ReDim Preserve shts(1 To no) getSheets = shts End Function Sub test() Dim shts Dim shtPos As Integer shts = getSheets() For shtPos = LBound(shts) To UBound(shts) Debug.Print shts(shtPos).Name Next shtPos End Sub
さて、どういう場合にこれが役に立つのでしょうか?
答えは簡単!
オブジェクトに対する処理を実行してしまう前に確認しておきたい場合ですね。(そのまんま)
例えば、処理前に対象シート名を一覧表示して、そこからまた選択するとか、あるいは、本当に処理を行うのかを考え直せるようにするとかね。
他には、単に繰り返し処理すればよいのではなく、何度も色々な処理をしないといけない場合とか。
今回のは、動的配列にセットする方法です。
どちらかというと旧式の方法ですね。
次回はもう少し新しい方法を紹介しましょう。