ExcelマクロVBA再入門
第5回.同じ計算を行数分繰り返す(For~Next)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
最終更新日:2017-01-11

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


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


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

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

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

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

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

Excel マクロVBA 実行結果


まずは、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)

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

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

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

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

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

Enter

dim i
Enter


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

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

この
Dim
というのが、変数を使う時の決まり文句です。
i
これが、変数の名前です。
つまり

Dim 変数名
これで書いた変数名を変数として使えるようになります。

第1回.マクロを書く準備をする
マクロを書こうと思ったら、まず初めにマクロを書く準備をする必要があります。と、その前に、ひとつ説明しておくことがあります。エクセルのマクロと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 サンプルコード

では実行してみましょう。
ただし、今までのように、実行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段さげる

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




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

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


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

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



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

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


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




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