エクセルマクロ・VBA入門第7回 繰り返し処理をマスターして仕事を爆速化!

こんにちは、エクセル使いこなし隊 隊長の吉井良平です。

 

「ノンプログラマーのためのエクセルマクロ・VBA入門」の第7回は、繰り返し処理に関してです。

エクセルを使ってると、「同じことを何度も繰り返す」ということがありますよね。

同じようなことを何度もコピペしたり、フィルターを一つ一つかけてデータを抽出していったり・・・というようなことをされている方は、繰り返し処理を使うことで、仕事が「爆速化」します。

大げさじゃなくて、100分の1ぐらいになることもあります。

仕事の効率という問題だけじゃなくて、同じことをずっとコピペする作業って、冴えないですよね。やってると眠くなるし、「僕はこんなことをするために、この世に生まれてきたんじゃない!」とか思ってしまうこともあるでしょう!?

ということで、繰り返し処理をする方法を紹介します。

(注:繰り返し処理単体ではそこまでの削減効果はなく、次の回の「条件分岐」と合わせて理解しておく必要があることを、最初に書いておきますね)

繰り返し処理の書き方

 

まず、繰り返し処理とは何ぞや?というと、同じことを繰り返して処理することです。(そのまんま・・・)

 

まぁでもいちいち説明するよりも、実際にやってみた方が分かりやすいので、実際にやってみましょう。

「Don’t Think, Feel!」「見る前に跳べ!」「迷わずやれよ、やれば分かるさ!」の精神です。

 

2つの書き方

 

繰り返し処理には、2つの書き方があって、1つは「For … Next」という構文を使う書き方です。もう一つ、「Do … Loop」という構文を使った書き方があります。

実際に使ってみる前に、ちょっとこの違いを説明しておくと、

For…Next は、「〇〇が××から△△の間だけ繰り返す」ということで、繰り返しの終わりがはっきりしている場合に使います。

Do…Loop は、「〇〇が、××である限り繰り返す」ということで、繰り返しの終わりがはっきりしていない(その都度変わる)場合に使います。

 

とはいえ、For…Next でも繰り返しの終りを毎回変更することができるのですが、考え方に違いがあるということだけを、まず書いておきます。

 

For…Next 構文

fornext

For で書き始めて、繰り返しする内容を書いて、最後に Next で締めるやり方です。

ビジュアルベーシックエディターを立ち上げて、次のプログラムを貼り付けしてくださいね。

 

実行すると、こんな感じになります。

お前はもう、VBAを使っている!

お前はもう、VBAを使っている!

「北斗の拳」を知らない方にとっては何のこっちゃですが、この例をもとに For…Next を使った繰り返し処理を紹介します^^

 

プログラムの解説

 

・1行目と16行目

マクロは、Subに始まりEnd Subで終わるということでしたよね。

このマクロの名前は、「あたた」です。

・3行目と4行目:変数の宣言

3行目で、i という変数を、数値型と宣言しています。

4行目で、ATA という変数を、文字列型と宣言しています。

一般的に繰り返しをする数は、i とすることが多いので、今回はその例に倣ってみました。

ATAは・・・適当です。

*変数に関してうろ覚えの方は、第5回目の記事をご覧ください。

・6行目:変数に文字列を格納

ATAという文字列型の変数に、”あた” という文字列を格納というか、代入というか、セットしました。

・8行目:繰り返し処理の指定

For…Next構文の、For が ここで出てきました。

「For i = 1 To 100」で、i という変数を、1から100まで繰り返すという指定をしています。

ここの100を、10にしたら10回繰り返すし、10,000にしたら1万回繰り返します。

For 変数 = 開始数 To 終了数

で、繰り返しを指定する、ということを覚えておきましょう。

・10行目と12行目:繰り返しの中身

  Cells(i, 1) = ATA & “!” で、セル i行の1列目に、変数 ATA に “!” を付けた値を入れなさいという命令です。
文字同士をつなぐ場合は、通常のセルの操作と同じように &(アンパサダント)の記号を使います。
i の値は、1~100まで順に増えていくので、1行目の処理が終わったら、次は繰り返しで2行目の処理がされて、100行目まで同じ処理されます。
文字をセル入れ終わったら、ATA = ATA & “た” で、変数 ATA に “た” を一つ付け加えています。
・14行目: 繰り返しの最初に戻る
Nextで、またForの部分に戻ります。
  • For が繰り返しの最初で、Next で締めて For に戻る
  • For…Next を使った場合は、最初に繰り返し回数を指定する必要がある

ということを覚えておいてくださいね。

 

先ほどのプログラムは全く実用性がなかったので^^もう一つサンプルプログラムを紹介します。

こちらはワークシートの追加をしているので、少し実用的です。

Do…Loop 構文

doloop

Do で書き始めて、繰り返しする内容を書いて、最後に Loop で締めるやり方です。

こちらは、サンプルデータがあった方が良いので、まずは下記のサンプルデータをダウンロードしてから、そのエクセルファイルにプログラムを貼り付けてくださいね。

ダウンロード

 

 

プログラムの解説

・1行目と17行目

マクロは、Subに始まりEnd Subで終わります。このマクロの名前は、「人口密度」です。

・3行目:変数の宣言

3行目で、i という繰り返し変数を、数値型と宣言しています。

・5行目:項目名を作る

Cells(3, 5) = “人口密度” で、3行目の5列目(E3)に項目名として”人口密度”を入れています。

・7行目:変数 i の初期値を設定

Do…Loop の場合は、初期値を別途指定する必要があります。

今回は4行目からスタートするので、4と設定しました。

・9行目:繰り返し処理の指定

Do…Loop構文の、Do が ここで出てきました。

「Do Until Cells(i, 2) = “”」で、2列目が “” (空白)になるまで、と繰り返しをする終了を指定しています。

 Do Until 条件

で、条件になるまで繰り返しを指定する、ということを覚えておきましょう。

 Do While 条件

で、条件と一致している間、という指定もできます。

この場合は、While <> ”” (空白じゃない間)という書き方もできます。

また、条件は Loop の後に指定することもできるんですが、最初からあれこれ書くとこんがらがるかもしれないので、一応そういうこともできるということを書いておきます。

・11行目:繰り返しの中身

Cells(i, 5) = Cells(i, 3) / Cells(i, 4) * 1000
5列目は、3列目の値(人口)を4列目の値(面積)で割った値に1,000を掛けた値を入れなさい、ということです。
この場合は、元データが千人単位の数字なので、1000をかけています。
・12行目:変数を増やす
Do…Loop の場合は、For…Nextのように自動的に変数が1ずつ増えていかないので、変数を1増やすコードを書いています。
「 i = i + 1」で、元々の i の値から1を足したものを、再度 i の値にしています。
ここで +2 にしてやると、2行ごとに処理しますし、+5にしてやると5行ごとに処理するようになります。
・15行目: 繰り返しの最初に戻る
Loopで、また Do の部分に戻ります。
  • Do が繰り返しの最初で、Loop で締めて Do に戻る
  • Do…Loop を使った場合は、条件を指定して繰り返しを指定する

というこを覚えておいてくださいね。

せっかくなので、もう一つサンプルプログラムを紹介します。

これも貼り付けて実行してみてください。こちらはLoopの後に条件を付けたパターンです。

 

まとめ

 

今回は、繰り返し処理を紹介しました。

繰り返し処理には、For…Next と Do…Loop の2種類があるので、それぞれの使い方をおさえておいてくださいね。

Do…Loop の方は、条件の指定方法を間違えると「無限ループ」という厄介な問題が発生するので、最初は For…Next だけをマスターすれば大丈夫です。

最初にも書きましたが、繰り返し処理だけではあまり実用的なプログラムは作れないので、次回の「条件分岐」の方法もマスターする必要があります。

エクセル業務を「爆速化」するためには、次の条件分岐に進みましょう!

エクセルマクロ・VBA入門第 8回 条件分岐をマスター

コメントを残す

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

ABOUTこの記事をかいた人

昭和48年広島県生まれ。現在も広島に住んでいます。 趣味は音楽鑑賞(邦楽、洋楽問わず、クラシック、童謡も)、マンガです。エクセルを効率的に使う方法を紹介して、あなたのお役に立ちたいと思っています。