ひさびさの感動

今日は書く事が多いなぁ・・・・。*1


とりあえず、今日の発見(そこ!今更とか言わないように!!)はEXCELマクロ(VBA)で発見した痒い所に手の届く小技です。

 obj = Range("A1:E1")

とすると、A1〜E1の値がobj変数に配列で保持されます。*2
そして、

 obj = Range("A1:E1")
 Range("A5:E5")=obj

とすると、obj変数の内容が一気にA5〜E5に入ります。
この技はめんどくさい処理解消にききました!

 obj = Range("A1:E1")
 Range("A5:B5")=obj

のように、obj変数よりも少ない範囲にデータを入れようとすると、途中まで*3反映されます。
また、

 obj = Range("A1:E1")
 Range("A5:A7")=obj

のようにすると、A5〜A7にA1の値が入ります。
この例の場合、obj変数は1行なのに反映先は3行なので同じ値が複数行に入ると思われます。*4
あと、

 obj = Range("A1:E1")
 Range("A5:J5")=obj

とすると、A5〜E5は「Range("A5:E5")=obj」と同じ内容になりますが、F5〜J5の値はN/Aになります。*5


次の技はこれ!

 Range("A1:E1").Offset(1, 0).Select

と記述すると、A2〜E2が選択されます。

 Range("A1:E1").Offset(0,1).Select

と記述すると、B1〜F1が選択されます。
なにが?と思われた方もいると思いますが、Range()にて範囲選択した時にOffsetを使うなんて今まで思いもよらなかった私としては驚愕でした。
すばらしっこい!!!この2つの発見と今までの経験値をあわせて作成した今日のVBAプログラムは・・・
今日のところは最高の出来!ですネ。(間違いなく・・・)
まぁ、こういう事は自画自賛しないと誰も褒めてくれないからね♪
v(^皿^*)
 

*1:書かない時はいっこうに書かないのにね・・・。┐(゜〜゜;)┌

*2:obj(1,1)=A1の値、obj(1,2)=B1の値、obj(1,3)=C1の値、obj(1,4)=D1の値、obj(1,5)=E1の値が入ります。

*3:この場合はA5がA1の値、B5がB1の値になります。

*4:obj変数がセルに対応した配列(2次元)になっているため!?

*5:配列がないから?だな!うん!!