見出し画像

VBA初級講座第5回②セルの値

前回、Rangeオブジェクトについていくつかのプロパティをみてきました。
つづいて「セルの値」です~(/・ω・)/

Valueプロパティ

とりあえずは写経。演習5-7です。

画像1

画像2

ちょっとまって、実行してイミディエイトにプリントされてOK~と思ってたら、なんとエクセルのシートに書き込まれているではないですか!!!

画像4

なんと!setValue的なことが代入だけでできるのですね~!すごい~!

Valueプロパティは省略することもでき、入門書などでもよく省略されています。書籍のように単体で書いたものを読む場合には文字量が減って、すっきりわかりやすくなったように感じるのですが、実務で使うプログラムになると、Valueを省略した場合にRangeなのかValueなのかが文脈によって変わってしまい分かりにくくなるそう。

省略はしない方が分かりやすい、はリーダブルコードの鉄則ですね。

つづいて演習5-9。

画像5

画像7

画像8

コピーされた!!
イミディエイトウィンドウ、小さなブロックのデバックに便利ですね!!

ちなみに、イミディエイトウィンドウでコマンド実行する時にさきほどまでついていた先頭の「?」をつけて実行してみると・・・

画像9

実行した結果、Trueが出力されました。

画像10

Excel側はというと・・・

画像11

クリップボードにコピーされ、

画像12

Sheet2にはコピーされてなかった・・・!

先生曰く、?はDebug.Printを意味するもの。メソッドの実行するときは「?」はつけないとのこと。?をつけるとプロパティを取り出すことはできるけど書き込むことができなくなるってことかな?

セル範囲のループ

続いてセル範囲のループです。範囲のループといえば、Cellsの出番ですね!

画像13

こんな表に対して順番に出力する処理を書いていきます。
演習5-11

For...Next文によるループ

画像14

画像15

実務でそのまま使えそうな感じになってきましたね~!

Do While...Loop文によるループ

画像16

画像17

誤って無限ループに陥ってしまった場合には、焦らずすぐに「Esc」という優しい案内が。

そしてそれだけ言われてわかっていてもやってしまうのが無限ループw

画像18

えすけーーーーーーぷ!

さて、気を取り直して演習5-14。

画像19

画像20

ループの中でDebug.Printする際に末尾に「,」を入れてjのループを抜けた先で空のDebug.Printをするのは、イミディエイトウィンドウの中で改行させるためのテクニックだそう。

iが縦でjが横だから、
まず縦に1個すすみA2を出力して「,」
で横に1個進みB2を出力、
ループを抜けて空のDebug.Printをする、

次に縦に1個すすみA3を...

とつながるわけですね。なるほど~

行列のあるエクセルでは、
縦横のダブルループはよくよく使いそうですね(/・ω・)/

For...Each文

つづいて演習5-16。

画像21

え、これだけ?
実行すると・・・

画像22

出力はできているけれども全部横に出力されてしまいました。

ということで宿題。
B列までを出力したら改行して次の行へ進むように改築しましょうとのこと。楽しそうなお題・・・!

多くの入門書では「セルの値」などが冒頭で出てくるところ、
ノンプロ研の講座では第5回でやっと登場しました。
そこまでたどり着くまでの過程にとてもこだわりを感じます。

なんとなくコピペでできるようになることではなく、仕組みからきちんと理解して応用力をもって書けるようになることを重視しているからですね~


以上、Rangeオブジェクトでした!
今日ももりだくさんでしたね~!

また来週水曜日にお会いしましょう~(/・ω・)/


この記事が気に入ったらサポートをしてみませんか?