「VBA sort setrange 変数」
という検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスがありました。
並べ替えるセル範囲を指定する際に利用する、Sortオブジェクトが持つSetRangeメソッドの引数指定を、
変数を使って行うには、どのようなコードを書けばいいのかを探していらしたのでしょうか。
SetRangeメソッドの引数指定を変数で行うサンプル
以下のような簡単な表を用意しておいて、
Subプロシージャをステップ実行することで、SetRangeメソッドに限らずSortオブジェクトについての理解が深まるはずです。
実行するSubプロシージャは以下のとおりです。
Dim sot As Sort
Set sot = ActiveSheet.Sort
sot.SortFields.Clear
Dim rng_target As Range
Set rng_target = Range("A1:B6")
sot.SetRange rng_target '← SetRangeの引数を変数で指定
sot.Header = xlYes
Dim rng_key As Range
Set rng_key = Range("B1")
sot.SortFields.Add rng_key
End Sub
SortオブジェクトのSetRangeメソッドの引数指定を、変数を使って行っているのは、
Dim rng_target As Range
Set rng_target = Range("A1:B6")
sot.SetRange rng_target
の部分です。
Sort.SetRangeに指定する引数はRange型
オブジェクトブラウザーや、ヒントでも確認できるとおり、
Sortオブジェクトが持つSetRangeメソッドの引数には、並べ替えを行いたいセル範囲を表すRangeオブジェクトを指定します。
これを変数で指定するのですから、Range型のオブジェクト変数を用意しておいて、
Dim rng_target As Range
Setステートメントでセル範囲をセットして、
Set rng_target = Range("A1:B6")
引数にオブジェクト変数を指定しています。
sot.SetRange rng_target
sot.SetRange(rng_target)
のようにカッコで括る必要はありません。
Sort.Rngをローカルウィンドウで確認しましょう
拙著『いちばんやさしいPowerPoint VBAの教本』でも多用しているローカルウィンドウを使って、Sortオブジェクトに用意されているRngプロパティを確認しましょう。
SetRangeメソッドを実行すると、Sort.Rngプロパティの値が変化します。
確認していただきたいのは、
sot.SetRange rng_target
の実行前と実行後の、Sort.Rngです。
上記のSubプロシージャで、
sot.SetRange rng_target
を実行する前のオブジェクト変数sotのRngには、下図のとおり何も格納されていません。
しかし
sot.SetRange rng_target
が実行されると、並べ替えを行いたいセル範囲が格納されたので、Rngの先頭に[+]マークが表示されます。
Rng下のValues2プロパティを展開してみると、
SetRangeメソッドで設定したセル範囲の値が格納されている様子を確認できます。
RngプロパティとSetRangeメソッド
ところで、並べ替えを行うセル範囲を表すのが(理由はわかりませんが)、Rngプロパティなのですから、
その設定を行うメソッドの名前を、どうして「SetRng」にしなかったのか私は疑問に感じます。
あるいは逆にメソッドがSetRangeならば、プロパティの名前としては他のオブジェクトでは見ることのない「Rng」ではなく、
(上図は、オブジェクトブラウザーで「rng」を検索した結果)
一般的なRangeにすべきだったのではないかと思っています。
最終更新日時:2020-05-04 17:31
Home » エクセルマクロ・Excel VBAの使い方 » Sortオブジェクト » Sortの範囲指定時に使うSetRangeメソッドの引数を変数で