エクセルマクロ・VBA達人養成塾 小川です。
キューバ旅行記、その81です。
キューバ屈指の外人向けリゾート地、バラデロにて。
バラデロ3日目の朝。「Delfinario (デルフィナリオ)」という、イルカと遊べるテーマパークに行って帰ってきました。
デルフィナリオから戻ります。
あー、そうそう。たまにはゴハンの写真なども。
甘すぎて食べれなかったケーキ。
ホテルのプール。
ロビーにて。
塾長のキューバ旅行記、最初から読みたい方はこちらから
ちょっと前のブログ記事「複数セルに値を入れる処理を高速化したい – Excelマクロ・VBA」
と、その続きの記事「複数セルでの処理を高速化したい-その2 Unionメソッドを使用する Excelマクロ・VBA」
に関連して、ついでに書こうと思っていて忘れていたことがいくつかありました。
今日は、そのうちのひとつについて。
こんなサンプルコード↓を紹介しました。
Dim r As Range
Set r = Union(Range(“A1:C5”), Range(“B4:F8”))
r.Select
End Sub
Unionメソッドは、複数のセル範囲のすべてを含むセル範囲を返します。
で。
その反対に、
複数のセル範囲のすべてに含まれるセル範囲を返すメソッドもあります。
それが、 Intersect というメソッドです。
例えば、以下のマクロを実行すると、セル範囲C3:D5が選択されます。
Dim r As Range
Set r = Intersect(Range(“A1:D5”), Range(“C3:F6”))
r.Select
End Sub
まあ、Unionと比べて、使用頻度はかなり落ちますが…。対にして覚えたいノウハウなので、ご参考までに。
あと、Intersectメソッドを使わなくても、実は、以下の書き方でも、「複数のセル範囲のすべてに含まれるセル範囲」を一気に指定できます。
絶対使わない手法ですが、ご参考までに。
Dim r As Range
Set r = Range(“A1:D5 C3:F6”)
r.Select
End Sub
引数の間に、スペースが入っています。
どういうことかというと…。
以下、ヘルプから引用しますね。
必ず指定します。バリアント型 (Variant) の値を範囲の名前を指定します。これは、マクロの言語の A1 形式での範囲である必要があります。範囲名には、範囲を表す演算子 (:)、共通部分を表す演算子 (スペース) または複数の範囲を表す演算子 (,) を含めることができます。また、ドル記号 ($) は含めることはできますが、無視されます。範囲の一部にローカルに定義した名前を使用できます。名前を使用する場合、その名前はマクロの言語と見なされます。
スペースも、演算子なんですね。
ちなみに、この性質は、エクセルの関数にもあります。
例えば、以下のデータがセルに書き込まれているとします。
|B列 |C列 |D列 | ------------------------------- 2 行目 |id |datat1|data2 | ------------------------------- 3 行目 |a1 |1 |10 | ------------------------------- 4 行目 |a2 |2 |20 | ------------------------------- 5 行目 |a3 |3 |30 | -------------------------------
そのとき、セルA1に、以下の関数を書き込みます。
すると、Sum関数は、セルC3~D5までの範囲の値を合計し、セルA1に66と表示されます。
…。
あー、また、どうでも良いことを書いてしまった。
Intersectだけは覚えてください。
Dim r As Range
Set r = Range(“A1:D5 C3:F6”)
r.Select
End Sub
とか、
とかについては、忘れてください。こんなの覚えるのは、人生のムダです。
僕だって、こんなの、一生にあと何回書くことか… ヾ(´ー`)ノ
あ、あと、最後にお知らせが2つ。こちらは、人生の役に立つほう。
人気のセミナー2つを、久しぶりに開催します。
「エクセルデータ分析7つの上級技」
受講受付開始しました。ふるってご参加ください☆
ではでは (^^)/~