エクセルマクロで意外と重要なcellsプロパティ

これまで
・ ステップイン
・ if文
・ ループ処理
・ 変数
とやってきました。最後に覚えて頂きたいのがcells(セルズ)プロパティです。
 
 
なにこれ?と思うでしょうが、これを覚えない(使わない)とループや変数を覚えた意味がなくなってしまいます。
 
 

cellsってなに?

cellsはRangeと同じです。
 
Rangeは自動記録でも出てきたと思います。
Rangeはセルの指定に使うものです。
 
 

◆使い方、記述方法は?

Rangeはセルの名前を指定しましたが、cellsは行番号と列番号を指定して使います。

記述方法 →  cells(行番号、列番号)   
 
 

例1_A1セルの指定

Rangeを使うと、Range(“A1”)
cellsで記述すると、cells(1,1)

 A1セルはシートの1行目、1列目にあるのでこのような記述になります。

例2_C6セルの指定

Rangeでは、Range(“C6”)
cellsで記述すると、cells(6,3)

 C6セルはシートの6行目、3列目にあるのでこうなります。

例3_B4セルに”ここがB4セルだよ”と文字を入れたい場合

Rangeでは、Range(“B4”) = ”ここがB4セルだよ”
cellsでは、cells(4,2) = ”ここがB4セルだよ”

 
 

◆なぜ使わなければならないの?

 
Rangeと同じならRangeを使えばいーじゃんと思ってしまうかもしれませんが、ここからが本題です。
 
cellsはセルを指定する方法が“数値”であるという所がミソ。
 
数値であるということは、ループ処理のときに「変数」を使って指定することができるんです。
 
 

例_ループ処理のコード
sub ループ2()
 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の列指定部分に入れてみましょう。

例_横方向セルに増えていくループ
sub ループ横()
 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つずつみていって、空白のセルがあれば、メッセージボックスを表示したい
というマクロを作ってみます。

サンプル
sub 最後のお題()
 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)

これもステップインで見ていくとよく分かると思いますので是非やってみてください。

これで 「エクセルマクロの自動記録の編集でつまづいている方へ」 向けたマクロ超超入門を終わります。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。