VBA再入門
同じ計算を行数分繰り返す(For~Next)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
公開日:2015-08-21 最終更新日:2020-09-26

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


エクセルの表とは、横に項目が並び、縦にデータが入っているものです。
この表を、簡単に計算できなければマクロVBAを作る意味がありません。


同じ計算を、データ行数分繰り返すマクロVBAコードです。
以下の表で、データ行数分繰り返し計算をやってみましょう。

練習用のデータ作成について

今まで書きませんでしたが、練習用のデータは、自分で作りましょう。
エクセルの上達には慣れが必要です。
本を読んでもタイピングは早くなりません。
練習あるのみです、エクセルも同じです。

他愛もない、下のようなデータを作るにも、それなりの時間がかかります。
そういう事を通してエクセルに慣れることも、マクロ上達につながるのです。
VBAの文法ばかり覚えても、マクロをサクッと書けるようにはなりません。
ちなみに以下のデータは、RANDBETWEEN関数で作りました。
RAND関数:0以上で1より小さい実数の乱数を発生させます。RANDBETWEEN関数:指定された範囲内の整数の乱数を返します。いずれも、ワークシートが再計算されるたびに、新しい乱数が返されます。RAND関数、RANDBETWEEN関数の書式 RAND() RANDBETWEEN(最小値,最大値) ※RAND関数に…

Excel マクロVBA 実行結果

1行だけの計算をする場合は

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

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


Excel マクロVBA サンプルコード

実行すると、

Excel マクロVBA 実行結果

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

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

VBAの変数とは

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

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

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

Excel マクロVBA サンプルコード

Enter

dim i
Enter


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

Excel マクロVBA サンプルコード

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

第1回.マクロを書く準備をする
・開発タブの表示 ・VBEの設定 ・標準モジュールの挿入 ・「マクロを書く準備をする」のまとめ ・ExcelマクロVBA入門の対応ページ
ここで、
「変数の宣言を強制する」にチェックをつける
これを覚えていますか。
変数を使う時は、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)
このように書き変えてください。

Excel マクロVBA サンプルコード

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

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

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

i=2


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

Excel マクロVBA サンプルコード

デバッグ:ステップ イン F8

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

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

Excel マクロVBA 実行結果

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

Excel マクロVBA サンプルコード

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

Excel マクロVBA サンプルコード

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

Excel マクロVBA サンプルコード

このように、
i = 2
が表示されるのを確認してください。
iの真上にピンポイントでカーソルを合わせないと表示されません。
これは、必ず確認してください。
Cellsの上にカーソルを合わせれば、
Excel マクロVBA サンプルコード
このように、セルの値が表示されます。
マクロがちゃんと動かない・・・
という相談の多くは、この操作が出来ていないことが多いのです。
今後、複雑なマクロを書いていけばいくほど、これは重要になってきます。

この時点で、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で確認中に間違いを見つけて、もう途中で止めたいと思ったら、
実行→リセット
青い四角いボタンがリセットボタンです。

Excel マクロVBA サンプルコード

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

Excel マクロVBA サンプルコード

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

つまり、
iが2から3、4、・・・
と増えて言ってくれれば良いのです。

変数を使った繰り返し処理

VBAでは、これが簡単に書けるようになっています。
今回は、先に回答コードを示します。

Excel マクロ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コードを実行しながら、バックでセルに値が入る様子を見えるようにしてください。

Excel マクロ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


Excel マクロVBA サンプルコード

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入門の対応ページ

第12回.変数宣言のDimとデータ型
・データ型 ・変数の使い方 ・変数名の規則 ・良く使われる変数名 ・自動型変換、暗黙の型変換 ・変数宣言の必要性 ・Dim変数宣言のまとめ

第16回.繰り返し処理(For Next)
・For Next ステートメント ・For Next 例文 ・For Next をステップ イン実行で目で見て確認しましょう。 ・1行置きに処理する場合 ・Exit For ・For~Nextのネスト(入れ子) ・最後に一言

VBEの使い方:デバッグ
・実行、中断、リセット(停止) ・ステップ実行 ・呼び出し履歴 ・VBA実行途中で変数の状態を確認 ・Debug.Print ・Debug.Assert ・デバッグの最後に



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

第2回.マクロを書いて動かす(SubとF5)
第3回.セルに数字や文字を入れる(RangeとCells)
第4回.セルの値を使って計算する(四則演算)
第5回.同じ計算を行数分繰り返す(For~Next)
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xlUp).Row)
第7回.セルの値によって計算を変える(Ifステートメント)
第8回.表範囲をまとめて消去する(OffsetとClearContents)
第9回.関数という便利な道具(VBA関数)
第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)


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

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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