|
▼あまのじゃく さん:
こんばんは。
>実は、訳あって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
コレクションの総数がわからないと使えませんが・・・。
|
|