VBA初級講座第5回②セルの値
前回、Rangeオブジェクトについていくつかのプロパティをみてきました。
つづいて「セルの値」です~(/・ω・)/
Valueプロパティ
とりあえずは写経。演習5-7です。
ちょっとまって、実行してイミディエイトにプリントされてOK~と思ってたら、なんとエクセルのシートに書き込まれているではないですか!!!
なんと!setValue的なことが代入だけでできるのですね~!すごい~!
Valueプロパティは省略することもでき、入門書などでもよく省略されています。書籍のように単体で書いたものを読む場合には文字量が減って、すっきりわかりやすくなったように感じるのですが、実務で使うプログラムになると、Valueを省略した場合にRangeなのかValueなのかが文脈によって変わってしまい分かりにくくなるそう。
省略はしない方が分かりやすい、はリーダブルコードの鉄則ですね。
つづいて演習5-9。
コピーされた!!
イミディエイトウィンドウ、小さなブロックのデバックに便利ですね!!
ちなみに、イミディエイトウィンドウでコマンド実行する時にさきほどまでついていた先頭の「?」をつけて実行してみると・・・
実行した結果、Trueが出力されました。
Excel側はというと・・・
クリップボードにコピーされ、
Sheet2にはコピーされてなかった・・・!
先生曰く、?はDebug.Printを意味するもの。メソッドの実行するときは「?」はつけないとのこと。?をつけるとプロパティを取り出すことはできるけど書き込むことができなくなるってことかな?
セル範囲のループ
続いてセル範囲のループです。範囲のループといえば、Cellsの出番ですね!
こんな表に対して順番に出力する処理を書いていきます。
演習5-11
For...Next文によるループ
実務でそのまま使えそうな感じになってきましたね~!
Do While...Loop文によるループ
誤って無限ループに陥ってしまった場合には、焦らずすぐに「Esc」という優しい案内が。
そしてそれだけ言われてわかっていてもやってしまうのが無限ループw
えすけーーーーーーぷ!
さて、気を取り直して演習5-14。
ループの中でDebug.Printする際に末尾に「,」を入れてjのループを抜けた先で空のDebug.Printをするのは、イミディエイトウィンドウの中で改行させるためのテクニックだそう。
iが縦でjが横だから、
まず縦に1個すすみA2を出力して「,」
で横に1個進みB2を出力、
ループを抜けて空のDebug.Printをする、
次に縦に1個すすみA3を...
とつながるわけですね。なるほど~
行列のあるエクセルでは、
縦横のダブルループはよくよく使いそうですね(/・ω・)/
For...Each文
つづいて演習5-16。
え、これだけ?
実行すると・・・
出力はできているけれども全部横に出力されてしまいました。
ということで宿題。
B列までを出力したら改行して次の行へ進むように改築しましょうとのこと。楽しそうなお題・・・!
多くの入門書では「セルの値」などが冒頭で出てくるところ、
ノンプロ研の講座では第5回でやっと登場しました。
そこまでたどり着くまでの過程にとてもこだわりを感じます。
なんとなくコピペでできるようになることではなく、仕組みからきちんと理解して応用力をもって書けるようになることを重視しているからですね~
以上、Rangeオブジェクトでした!
今日ももりだくさんでしたね~!
また来週水曜日にお会いしましょう~(/・ω・)/
この記事が気に入ったらサポートをしてみませんか?