(Excel No20)「オブジェクトの繰り返しは簡単(2)」

前回は、オブジェクトを繰り返し処理する手を紹介しました。
今回も同じような事をしてみましょう。
ただ、少しだけ変えてみます。
繰り返しながらオブジェクトの処理をするのではなく、処理したいオブジェクトを先に取得して、あとから一気に処理する方法です。
以下は、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

さて、どういう場合にこれが役に立つのでしょうか?

答えは簡単!

オブジェクトに対する処理を実行してしまう前に確認しておきたい場合ですね。(そのまんま)

例えば、処理前に対象シート名を一覧表示して、そこからまた選択するとか、あるいは、本当に処理を行うのかを考え直せるようにするとかね。

他には、単に繰り返し処理すればよいのではなく、何度も色々な処理をしないといけない場合とか。

今回のは、動的配列にセットする方法です。

どちらかというと旧式の方法ですね。

次回はもう少し新しい方法を紹介しましょう。

コメントを残す

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

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください