Home » エクセルマクロ・Excel VBAの使い方 » Sortオブジェクト » Sortの範囲指定時に使うSetRangeメソッドの引数を変数で

Sortの範囲指定時に使うSetRangeメソッドの引数を変数で

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2004 ビルド12730.20236 Microsoft Store)

「VBA sort setrange 変数」
という検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスがありました。

並べ替えるセル範囲を指定する際に利用する、Sortオブジェクトが持つSetRangeメソッドの引数指定を、

変数を使って行うには、どのようなコードを書けばいいのかを探していらしたのでしょうか。

[スポンサードリンク]

SetRangeメソッドの引数指定を変数で行うサンプル

以下のような簡単な表を用意しておいて、

Subプロシージャをステップ実行することで、SetRangeメソッドに限らずSortオブジェクトについての理解が深まるはずです。

実行するSubプロシージャは以下のとおりです。

Sub SetRangeの引数を変数を使って指定する()
 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

 sot.Apply
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

なお、オブジェクトブラウザーの詳細ペインに「Sub SetRange」と表示されているとおり、

そもそもSort.SetRangeメソッドに戻り値はありませんし、変数への代入を行っているわけでもありませんから、引数を
  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メソッドの引数を変数で

「Sortオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.