SetRange はくれぐれも慎重に!

 今回は本当にちょこっとコードを触っておしまいです。
 少しいじっておきたいのが次のコード。

.SetRange Range("B2:C6")

 これは Worksheets("いつ").Sort という Sort オブジェクトに対して並べ替えるセルの範囲を指定するメソッドでしたね。 今の段階ではこの記述で全く問題ないのですけど、データが増やすときには C6 の部分を変えなくてはなりません。今はデータの個数が 5 ですね。それを 10 に増やすなら "C11" としておく必要があります。「でも、データの個数が増えるたびに書き直すなんて、ちょー面倒くさい。もういつどこソフト作るのやーめた」と思われるかもしれませんね。

 大丈夫。この部分は予め多めに数値をとっておけば問題ありません。当面、1000 個のデータを入れようと思うなら "C1001" とでもしておいてください。そうした場合、今このマクロを実行すると、B2 セルから C1001 セルまでの広い範囲を空白セルも含めて並び替えることになります。それでも問題ありません。というのは、乱数の入っていない空白セルは並び替えの優先順位として一番下に置かれるからです。なので実際上はデータの入ったセルだけを選んで並び替えているのと同じことになります。

 しかし、B2 の部分だけはいじってはだめです! なまじ VBA に関する知識があると、「列をまとめて選択する方法を知ってるよ! いくらデータを増やしてもいいように Range("B:C") と書き直しておこうっと!」なんてことをしてしまうと、途端に不都合な結果が生じます(実はまだ VBA 初心者の頃に私がこれをやりました。馬鹿ですね。上の馬鹿な台詞も私です)。 SortFields コレクションに対する Add メソッドの引数をよく見てください。

.SortFields.Add Key:=Range("B2"), ......

「キーとなる Range は "B2" ですよ」と指定してありますね。このキーをずらしてはいけないのです。あまり余計なことはしないようにしましょう ...... 皆さんはしないかもしれませんけどね ...... こんな馬鹿なことをするのは私だけかもしれませんけどね ......

 これでひと段落です。これまでの改造では実行しても結果はマクロ記録と何も変わりません。しかし無駄な物は全てそぎ落とし、何を目的とするプログラムなのか明確になりました。プロパティやオブジェクトに対する理解も深まったのではないかと思います。
 次回からは、いよいよマクロ記録を使わずに、これまで作った土台にオリジナルコードを足していくことになります。最初に作るのは大量のデータを扱うために必要となる「乱数割当」というマクロです。会社の業務で使うようなマクロに応用できる記述が頻繁に登場しますので、参考になるところもあるかと思われます。どうぞお楽しみに!
 

おまけいつどこ載せとくね♪

・誰も知らない謎の祝日に、民芸博物館で 100 歳のおじいさんと天然少女がこばとのかわいいかんざしに気づいた。(よく気づきましたねー! これは百鳥さんが作ってくれた特別なかんざしですよー)

・真夜中に地熱発電所で小春ちゃんの先祖と弁当女子が青痣をつくった。

・憲法記念日に、堤防でおばさんと背の高い男がにゃんこの喧嘩を止めようとしたが、火に油を注ぐような結果になった。

・若盛りに寝室で 10 代の少年とタレントが正義の味方になった。

・ 14 世紀に親戚の家で 60 代の男とお侍さんが食うや食わずの生活を続けていた。(浪人さんですか? 大変ですねー)
 

温泉ではしゃいではいけません

・ 5 年前に楽器店で真面目な委員長と脳天気な女の子が部下を顎で使っていた。

・あれから 3 年の時が流れ、温泉で火星の王女と小春ちゃんの子孫が比留間沙希ちゃんに怒られた。(やっぱり火星の王女様には温泉が珍しくて仕方ないんですよねー。でもマナーを守ってくださいねー)

・ 10 日前に貯蔵所で田舎者とギャルがスポンジに洗剤をつけた。

・暇でどうしようもない時に、オスロで司書の御守さんと弥生人がのけぞった。(何もすることがなくて、のけぞったんですかー? 本当に暇ですねー)

・ 15 世紀に溜め池で外国婦人と看護師さんが苛々していた。

Google広告
スポンサーリンク
スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

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