ExcelマクロVBA再入門 | 第5回.同じ計算を行数分繰り返す(For〜Next) | マクロが覚えられないという初心者向けに理屈抜きのやさしい解説



最終更新日:2017-01-11

第5回.同じ計算を行数分繰り返す(For〜Next)


エクセルの表とは、横に項目が並び、縦にデータが入っているものです、

この表を、簡単に計算できなければマクロを作る意味がありません、

同じ計算を、データ行数分繰り返すマクロVBAコードです。

以下の表で、データ行数分繰り返し計算をやってみましょう。


※練習用のデータについて

今まで書きませんでしたが、練習用のデータは、自分で作りましょう。
エクセルの上達には慣れが必要です。
本を読んでもタイピングは早くなりません。
練習あるのみです、エクセルも同じです。
他愛もない、下のようなデータを作るにも、それなりの時間がかかります。
そういう事を通してエクセルに慣れることも、マクロ上達につながるのです。
VBAの文法ばかり覚えても、マクロをサクッと書けるようにはなりません。
ちなみに以下のデータは、RANDBETWEEN関数で作りました。



まずは、2行目のみ計算するマクロを書いてみましょう

sub 練習7
Enter
TAB
cells(2,3)=cells(2,1)*cells(2,2)
Enter




実行すると、



2行目は、ちゃんと計算できました。

このマクロは、
Cells(2, 3) = Cells(2, 1) * Cells(2, 2)
となっているので、2行目の計算をやってくれます。
3行目を計算するなら、
Cells(3, 3) = Cells(3, 1) * Cells(3, 2)

そこで、
Cellsの行数だけを変化出来れば便利ですよね。
VBAには、変数と言うものがあります。

変わる数ってことですが、データ入れ物、みたいに思ってもらえば良いです。
とりあえず、好きなデータを入れておけるものです。

では、変数を使ってみましょう。

CellsのCの前をクリックして、



Enter

dim i
Enter


※↑↓→←、入力手順に書く、これらは矢印キーを意味します。



この
Dim
というのが、変数を使う時の決まり文句です。
i
これが、変数の名前です。
つまり
Dim 変数名
これで書いた変数名を変数として使えるようになります。

第1回.マクロを書く準備をする
ここで、
「変数の宣言を強制する」にチェックをつける
これを覚えていますか。
変数を使う時は、Dimで宣言しますよーと、エクセルに約束したのです。
ですから、変数を使う時は、
Dim 変数名
これで、この変数名を使う事をエクセルに伝えるのです。

これで変数を使えるようになりましたが、計算しているコードが、
Cells(2, 3) = Cells(2, 1) * Cells(2, 2)
このままでは、何も変わりません。
そこで、2行目を指定している
Cells(2,
この2を変数iに取り替えます。
Cells(i, 3) = Cells(i, 1) * Cells(i, 2)
このように書き変えてください。



さて、どうでしょう、変数にはしましたが、
iって何が入っているの・・・
何も入っていません、当然これでは動きません。

iに何か入れしょう。
何かっていっても、ここでは、まずは2ですね。

変数に値を入れるのは、セルに値を入れるのと同じで、
i = 2
このように書けば、iに2が入ります。
では、
Dim i
の下の行に、

i=2


Enterを押すと、マクロの行が増えてしまいますが、
↑↓キーで、行をずらすと、入力しているコードが確定されて、
=の前後に半角空白が入ったり、コードの頭文字が大文字に変わります。



では実行してみましょう。
ただし、今までのように、実行F5ではなく、

メニュー→デバッグ→ステップ イン F8



ここは、マウスでは操作しずらいので、ショートカットのF8でやりましょう。
F8を1回押すと、



このように、コードの1行が黄色いくなります。
この黄色い行は、これから実行する行になります。
では、F8を、もう2回押すと



ここまで進みます。
ここで、
Cells(i,
変数iの上に、マウスカーソルを合わせてください。



このように、
i = 2
が表示されるのを確認してください。
iの真上にピンポイントでカーソルを合わせないと表示されません。
これは、必ず確認してください。
Cellsの上にカーソルを合わせれば、

このように、セルの値が表示されます。
マクロがちゃんと動かない・・・
という相談の多くは、この操作が出来ていないことが多いのです。
今後、複雑なマクロを書いていけばいくほど、これは重要になってきます。

この時点で、iには2が入っていますので、
Cells(i, 3) = Cells(i, 1) * Cells(i, 2)
これは、
Cells(2, 3) = Cells(2, 1) * Cells(2, 2)
これと同じことです。

ではF8をもう2回押してください。
黄色い行が消えるまでF8を押してください。
F8を押しすぎると、また先頭から実行されてしまいます。
通常はF8で確認して、確認できたら最後はF5で最後まで実行するのが普通です。

もしF8で確認中に間違いを見つけて、もう途中で止めたいと思ったら、
実行→リセット
青い四角いボタンがリセットボタンです。



話を戻して、先ほどの実行結果は、最初の結果と同じですね。
何にしろ2行目しか計算しません。
では3行目を計算するなら、
i = 2
これを
i = 3
と変更して、



これなら、3行目を計算してくれるはずです。
さすがに実行してみる必要はないでしょう。

つまり、
iが2から3、4、・・・
と増えて言ってくれれば良いのです。
VBAでは、これが簡単に書けるようになっています。

今回は、先に回答コードを示します。



これで、
iが2から11まで、1ずつ増えながら計算を繰り返してくれます。
For 変数 = 初期値 To 終了値
  繰り返したい処理・・・何行書いても良い
Next

後でもう少し詳しく書きますが、
このように書けば、
ForとNextのあいだに書いてあることを繰り返してくれるのだと、そのまま理解しましょう。

では書いてみましょう

sub 練習8
Enter
TAB
dim i
Enter
for i=2 to 11
Enter
Enter
next

TAB
cells(i,3)=cells(i,1)*cells(i,2)


正しく入力できれば、先の画像と同じになるはずです。
書き方の注意点は、
・forの行を書いたら、先にnextと書くこと
・ForとNextのあいだの行は、TABで1段さげる事です。

特に、TABで1段さげるのは、絶対に守ってください。
マクロの初心者ほどこれが守れなく、上級者ほど守っています。
つまり、この重要性が理解できないうちはマクロ初心者という事なのです。

では、ステップインF8で実行しながらセルに値がはいるのを確認してみましょう。
その前に、ウインドウをしたのように調整して、
VBAコードを実行しながら、バックでセルに値が入る様子を見えるようにしてください。



では、ステップインF8でゆっくり確認してください。
ここは、画像を載せきれないので、ご自身で・・・
F8を押しながら
変数iの値を確認しながら
セルに値が入る事を確認
してください。

F8での確認が出来たら、
今度は、C列の金額を消してから、
実行F5で一気に動かしてみて下さい。
一瞬で計算される事が分かります。

※For〜Nextの補足説明

For 変数 = 初期値 To 終了値
  繰り返したい処理
Next
このように書きましたが、
変数が1ずつ増えるばかりでは不便なこともあります。
例えば、
1,3,5,7,・・・
のように2ずつ増やしたいとか、
11,10,9,8,・・・
のように、1ずつ減らしたいとか、
そのような書きかたもVBAには用意されています。

For 変数 = 初期値 To 終了値 Step 加算値
  繰り返したい処理
Next




iの値が、
前者は、2,4,6,8,10
後者は、11,10,9,8,7,6,5,4,3,2

と変わりながら処理さてます。


※VBAコードの書き方について

ここまで、VBAのコードの書き順を詳しく示してきましたが、それもここまでにします。
記事の行数が多くなりすぎてしまい、他の重要な説明文が埋もれてしまう危険がありますので。
しかし、この書き順はとても重要です、何度か練習して、しっかり手に覚えさせてください。
特に、
Sub〜End Subの間は、TABで1段さげる
ForとNextの間は、TABで1段さげる

これらは徹底してください。
今後もサンプル画像等のインデントを、そのまま同じように記述することを心がけてください。





同じテーマ「ExcelマクロVBA再入門」の記事

第4回.セルの値を使って計算する(四則演算)
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xup).Row)
第7回.セルの値によって計算を変える(ステートメント)
第8回.表範囲をまとめて消去する(OffsetとClearContents)
第9回.関数という便利な道具(VBA関数)
第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)

新着記事 ・・・新着記事一覧を見る

空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.定数と型宣言文字(Const)|ExcelマクロVBA入門



  • >
  • >
  • >
  • 同じ計算を行数分繰り返す(For〜Next)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    ↑ PAGE TOP