| 
    
     |  | ▼あまのじゃく さん: こんばんは。
 
 >実は、訳あってForEachの実行順序を逆にしたいと
 >考えています。
 >
 >例えば、
 >
 >For Each cc In Range("A1:A20")
 >
 >Next cc
 >
 >の場合、A1,A2,A3...A20の順番に処理されますが、
 >A20,A19,...A1の順番にする方法はないのでしょうか。
 >この例では、セルなので、場合によってはアドレスを
 >直接操作すれば何とかなりますが、一般的なオブジェクト
 >を対象として、ForEach文の順序を逆順にする方法を
 >お伺いしたいと思います。
 ForEach文では順序の特定ができないので、再登録という方法です。
 '======================================================
 Sub test()
 Dim newrng As Collection
 Set newrng = get_Revcollet(Range("a1:a20"), Range("a1:a20").count)
 For Each aa In newrng
 MsgBox aa.Address
 Next
 End Sub
 '==================================================================
 Function get_Revcollet(objs As Object, count As Long) As Collection
 Dim obj As Object
 idx = count
 Set get_Revcollet = New Collection
 For Each obj In objs
 If idx = count Then
 get_Revcollet.Add Item:=obj, key:=Str(idx)
 jdx = idx
 Else
 get_Revcollet.Add Item:=obj, key:=Str(idx), before:=Str(jdx)
 jdx = jdx - 1
 End If
 idx = idx - 1
 Next
 End Function
 
 コレクションの総数がわからないと使えませんが・・・。
 
 
 |  |