これまで
・ ステップイン
・ if文
・ ループ処理
・ 変数
とやってきました。最後に覚えて頂きたいのがcells(セルズ)プロパティです。
なにこれ?と思うでしょうが、これを覚えない(使わない)とループや変数を覚えた意味がなくなってしまいます。
cellsってなに?
cellsはRangeと同じです。
Rangeは自動記録でも出てきたと思います。
Rangeはセルの指定に使うものです。
◆使い方、記述方法は?
Rangeはセルの名前を指定しましたが、cellsは行番号と列番号を指定して使います。
記述方法 → cells(行番号、列番号)
Rangeを使うと、Range(“A1”)
cellsで記述すると、cells(1,1)
A1セルはシートの1行目、1列目にあるのでこのような記述になります。
Rangeでは、Range(“C6”)
cellsで記述すると、cells(6,3)
C6セルはシートの6行目、3列目にあるのでこうなります。
Rangeでは、Range(“B4”) = ”ここがB4セルだよ”
cellsでは、cells(4,2) = ”ここがB4セルだよ”
◆なぜ使わなければならないの?
Rangeと同じならRangeを使えばいーじゃんと思ってしまうかもしれませんが、ここからが本題です。
cellsはセルを指定する方法が“数値”であるという所がミソ。
数値であるということは、ループ処理のときに「変数」を使って指定することができるんです。
for myLoop = 1 to 10
dim myLoop
cells(myLoop,1)=”ループだよ”
next
end sub
これはループ文のページのコードにあったループ文です。
メッセージボックス部分をcellsに変え、セル指定にしてみました。
■ステップインで見てみる
ステップインで試してみましょう。
cellsまでマーカーが来るようにF8を押します。
cells部分を実行するとA1セルの値が「ループだよ」になりましたね?
次々と実行していくと、A2セル、A3セル・・・とどんどん下に進んでいきますね。
cellsの中のmyLoopをみていくと(マウスオーバー)、数値が1、2、3・・・とどんどん数が増えていると思います。
cells(1,1)
cells(2,1)
cells(3,1)
・
・
・
という形でマクロが進んでいくと思います。。
ここで、あれ待てよ?Rangeを使ってもできるんじゃないの?と思った方がいらっしゃるかもしれません。
鋭いです!それでもいいんです、、、縦の動きの場合は!
上記の例では縦(行)方向に動かしましたが、横(列)方向に動かしたい場合はどうでしょう?Rangeではアルファベットの部分をA,B,C・・と変えて行かなければなりません。その理由から、cellsを使うことに意味があるのです。
■横(列)方向にループしてみる
今度はmyLoopをcellsの列指定部分に入れてみましょう。
for myLoop = 1 to 10
dim myLoop
cells(1,myLoop)=”ループだよ”
next
end sub
マクロを実行すると1行目のA,B,C列にどんどん文字が入っていきますね。cellsの中身を変数ではなく実数でみてみると、
1回目 cells(1.1) ← Range(“A1”)と同じ意味
2回目 cells(1.2) ← Range(“B1”)と同じ意味
3回目 cells(1.3) ← Range(“C1”)と同じ意味
となっていくので横(列方向)に文字が入っていくことになります。
Cellsを簡単にまとめると
・ cellsはRangeと同じ
・ ループさせるときに使う
※ cellsの使い方とループ処理を掛け合わせた内容はおわかり頂けましたでしょうか。
慣れるまで時間はかかると思いますが、ステップイン機能さえ使う事が出来れば理解可能だと思います。
最後のまとめ
ここまでで
・ ステップイン
・ if構文
・ ループ処理
・ 変数
・ cells
の内容をみて頂きました。
これでやっとマクロの世界のトビラが開きます。
これでマクロが書ける、もしくは読める(ステップインで進んでいく)ことができるようになったはずです。
マクロを習得するには、自分で書くのも大事ですが、他の人が書いたマクロを読んでいくこともとても勉強になります。
「あちゃ〜」というような書き方もありますが、他人の書いたマクロをステップインを使って読み解いていくことで
「こんな書き方があるのか」「これは効率的な書き方だね」など経験値が増えるので初期の頃は大事だと思っています。
最後になりますが、これまで出てきた項目を使ってマクロを書いてみましょう。
・ 対象のシートのA列には数値が入っていたり入っていなかったりするデータがあるものとします。
・ セルを1つずつみていって、空白のセルがあれば、メッセージボックスを表示したい
というマクロを作ってみます。
dim myLoop
for myLoop = 1 to 10
if cells(myLoop,1)=”” then
msgbox “空っぽだよ”
else
endif
next myLoop
End sub
記述した内容の意味は下記です。
ー ループを1から10まで10回繰り返す。(for myLoop = 1 to 10)
ー A列の変数の位置が空白のセルだった場合(if cells(myLoop,1)=”” then)
ー メッセージボックスを表示。(msgbox “空っぽだよ”)
ー そうじゃない(空白ではない)場合は(else)
ー 何もしない(何もしない場合は何も書かない!)
ー 。(endif)
ー 次の変数へ(next myLoop)
これもステップインで見ていくとよく分かると思いますので是非やってみてください。
これで 「エクセルマクロの自動記録の編集でつまづいている方へ」 向けたマクロ超超入門を終わります。