エクセルマクロのループ処理

マクロといえばループ処理

「データを1行ずつみていって、その行の内容によって処理内容を変えたい」
「データを1行ずつみていって、特定の行だけ別シートにコピーしたい」
「データを1行ずつみていって、特定の行だけ削除したい」
「番号を入力すればm名前や住所などの情報がでてくるようになっているシートをリスト番号すべて印刷したい」
 
 
 
こんなことやりたいんだけど、どうすればいいの?
ループってのがあるらしいんだけど、どうかくのか分からない。
本やwebを参考にコピペしてみたけどなにがどうなって、何故そうなるのかよくわからない。
 
 
そんなことで悩んでいないでしょうか。
 
 
 
私は悩んでましたし、Yahoo!知恵袋で質問したりしました。
その時はループは教えてもらえず、別の手段で解決してしまいましたが・・・汗
 
 
そんな方向けのページとしています。
 
 

※ 本やwebのループ文を参考に作ってみたけど/丸写ししたけど、動きがどうなっているのか分からない!という方は先述したステップイン機能を使ってみてください。

初めてのループ文

初めてループ文を書いてみるという方はここから説明です。

エクセルマクロのループには2種類ありますが、ここではfor ~ nextを使って説明します
(あくまで目的はループの動き、ループとはこういうものだということを知ってもらうためfor 〜 nextを使用します)。

書き方はとても簡単。

モジュールへ下記の文を記述してみてください。

ループの書き方例
sub ループ()
 dim myLoop
 for myLoop = 1 to 10
  msgbox “ループだよ”
 next myLoop
end sub

意味としては「forとnextの間の処理を1から10までの10回行いますよ」というものになります。
 
※ 今回、forとnextの間の処理はメッセージボックスを表示するだけにしています。

ステップインで確認

このときの動きをステップイン機能を使って確認してみましょう。

スポンサーリンク

ファンクションボタンF8を3回押すと黄色のマーカーがmsgboxのところにきたと思います。
マーカーは「これからここの処理をしますよ」という意味でしたね。
 

 
 
 
 
 
それではもう一度F8を押します。
すると、メッセージボックスが表示されます。
 

 
 
 
 
 
メッセージボックスのOKボタンを押してマクロ画面(VBE)へ戻るとnextの部分が黄色になってますね。
 

 
 
 
 
 
この時にmyLoop部分にカーソルをもっていき、マウスオーバー(クリックしないでちょっと待つ)すると「1」と出てきます。これが、「ループ1回目ですよ」というサインです。(ここでのmyLoopというワードは変数と呼ばれるものですが、いまは気にせず読み進んでください)
 

 
 
 
 
 
もう一度F8を押してマーカーがmsgboxのところにきた時に再度myLoopへマウスオーバーすると「2」になっていると思います。「ループ2回目」ということですね。
 
 
この例のループ処理は、もうおわかりかと思いますが、
 
「メッセージボックスの表示を10回繰り返す」
 
  という記述となります。
 
※ この例文の使い道はないのであしからず・・
 
 
まずはループの動きについて理解頂けましたでしょうか?
 
 
 
 
ループ文を書く時にはfor 〜 nextの間にループで処理したい内容を書いていくことになります。
でも、この説明だけじゃ1行ずつデータを見ていけないじゃないと思いますよね?(するどい!)

1行ずつデータを見ていくことについては次のステップ「変数」の章にて説明していきます。

ここでは「ループってこんなものなんだ」「こんな動きするんだ」ということを覚えてい
ただければと思います。

マクロの書き方の予備知識

■予備知識-その1■

今後の不要なエラーを起こさないために・・・

この章で記載したループ文や先述のif文を書くときの注意点です。

「for 〜 next」 や「if 〜 endif」 を使う時に、for(if)を書いてどんどん記述を重ねていくと、書いている内容がどんどん長くなり、for 〜 nextでループさせたいのに最終的にnext(endif)を書き忘れてしまってエラーが出るなどよくあります。
 
 
そんなことが起こらないように、for(if)を書いたらすぐにnext(endif)を書いて、その間に処理内容を書いていくクセをつけましょう。
 
 
 

■予備知識-その2■

飛び飛びのデータでループさせたい場合 ※ 規則性あることが条件

通常、for 〜 next を普通に書いたら1ずつ増えていきます。
↓の場合です。
for myLoop = 1 to 10
  [ ここに処理内容 ]
next

2ずつ増やしたい場合は下記のように記載します。
for myLoop = 1 to 10 step 2
  [ ここに処理内容 ]
next
 
 
これでmyLoopは1,3,5,7,9の順番でループしていくようになります。
 
 
  覚えておくと後々役に立ちますので頭に入れておきましょう。

スポンサーリンク

コメントを残す

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

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