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

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
最終更新日: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回.マクロを書く準備をする
マクロを書こうと思ったら、まず初めにマクロを書く準備をする必要があります。と、その前に、ひとつ説明しておくことがあります。エクセルのマクロと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とデータ型
マクロVBA入門者が、まず最初につまずくのが、このDimで変数を宣言することでしょう。変数とは、数値や文字列など(すなわちデータ)を一時的に格納する入れ物 と良く説明されますが、まずはこの考えで良いでしょう。この入れ物には、いろいろなタイプの入れ物があります。

第16回.繰り返し処理(For Next)
VBAのForNextは、同じ処理を繰り返し行うためのVBA構文です。繰り返し処理はループ処理とも呼ばれます。マクロでのループ処理の記述は何通りかありますが、まず最初に覚えるべきものが、今回説明するForNextです。

VBEの使い方:デバッグ
VBE(VisualBasicEditor)は、VBAで使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境です。ここではVBA開発で、重要かつ避けて通れないデバッグについて説明します。。



同じテーマ「マクロ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 ・・・新着記事一覧を見る

VBA100本ノック 18本目:名前定義の削除|VBA練習問題100(11月6日)
VBA100本ノック 17本目:重複削除(ユニーク化)|VBA練習問題100(11月6日)
VBA100本ノック 16本目:無駄な改行を削除|VBA練習問題100(11月5日)
VBA100本ノック 15本目:シートの並べ替え|VBA練習問題100(11月4日)
VBA100本ノック 14本目:社外秘シート削除|VBA練習問題100(11月3日)
VBA100本ノック 13本目:文字列の部分フォント|VBA練習問題100(11月1日)
VBA100本ノック 12本目:セル結合を解除|VBA練習問題100(10月31日)
VBA100本ノック 11本目:セル結合の警告|VBA練習問題100(10月30日)
VBA100本ノック 10本目:行の削除|VBA練習問題100(10月29日)
VBA100本ノック 9本目:フィルターコピー|VBA練習問題100(10月28日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.マクロって何?VBAって何?|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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