第5回.同じ計算を行数分繰り返す(For~Next)
エクセルの表とは、横に項目が並び、縦にデータが入っているものです。
この表を、簡単に計算できなければマクロVBAを作る意味がありません。
以下の表で、データ行数分繰り返し計算をやってみましょう。
練習用のデータ作成について
エクセルの上達には慣れが必要です。
本を読んでもタイピングは早くなりません。
練習あるのみです、エクセルも同じです。
そういう事を通してエクセルに慣れることも、マクロ上達につながるのです。
VBAの文法ばかり覚えても、マクロをサクッと書けるようにはなりません。
ちなみに以下のデータは、RANDBETWEEN関数で作りました。
1行だけの計算をする場合は
Enter
TAB
cells(2,3)=cells(2,1)*cells(2,2)
Enter
Cells(2, 3) = Cells(2, 1) * Cells(2, 2)
となっているので、2行目の計算をやってくれます。
3行目を計算するなら、
Cells(3, 3) = Cells(3, 1) * Cells(3, 2)
VBAの変数とは
Cellsの行数だけを変化出来れば便利ですよね。
VBAには、変数と言うものがあります。
変わる数ってことですが、データの入れ物、みたいに思ってもらえば良いです。
とりあえず、好きなデータを入れておけるものです。
では、変数を使ってみましょう。
↑
dim i
Enter
Dim
というのが、変数を使う時の決まり文句です。
i
これが、変数の名前です。
つまり
Dim 変数名
これで書いた変数名を変数として使えるようになります。
「変数の宣言を強制する」にチェックをつける
これを覚えていますか。
変数を使う時は、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って何が入っているの・・・
何も入っていません、当然これでは動きません。
何かといっても、ここでは、まずは2ですね。
i = 2
このように書けば、iに2が入ります。
では、
Dim i
の下の行に、
↓
↑↓キーで、行をずらすと、入力しているコードが確定されて、
=の前後に半角空白が入ったり、コードの頭文字が大文字に変わります。
デバッグ:ステップ イン F8
ただし、今までのように、実行F5ではなく、
F8を1回押すと、
この黄色い行は、これから実行する行になります。
では、F8を、もう2回押すと
ここで、
Cells(i,
の変数iの上に、マウスカーソルを合わせてください。
i = 2
が表示されるのを確認してください。
iの真上にピンポイントでカーソルを合わせないと表示されません。
これは、必ず確認してください。
Cellsの上にカーソルを合わせれば、
このように、セルの値が表示されます。
マクロがちゃんと動かない・・・
という相談の多くは、この操作が出来ていないことが多いのです。
今後、複雑なマクロを書いていけばいくほど、これは重要になってきます。
Cells(i, 3) = Cells(i, 1) * Cells(i, 2)
これは、
Cells(2, 3) = Cells(2, 1) * Cells(2, 2)
これと同じことです。
黄色い行が消えるまでF8を押してください。
F8を押しすぎると、また先頭から実行されてしまいます。
通常はF8で確認して、確認できたら最後はF5で最後まで実行するのが良いです。
実行→リセット
青い四角いボタンがリセットボタンです。
何にしろ2行目しか計算しません。
では3行目を計算するなら、
i = 2
これを
i = 3
と変更して、
さすがに実行してみる必要はないでしょう。
iが2から3、4、・・・
と増えて言ってくれれば良いのです。
変数を使った繰り返し処理
今回は、先に回答コードを示します。
iが2から11まで、1ずつ増えながら計算を繰り返してくれます。
For 変数 = 初期値 To 終了値
繰り返したい処理・・・何行書いても良い
Next
このように書けば、
ForとNextのあいだに書いてあることを繰り返してくれるのだと、そのまま理解しましょう。
では書いてみましょう
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のあいだの行は、TABで1段さげること。
マクロの初心者ほどこれが守れなく、上級者ほど守っています。
つまり、この重要性が理解できないうちはマクロ初心者という事なのです。
その前に、ウインドウをしたのように調整して、
VBAコードを実行しながら、バックでセルに値が入る様子を見えるようにしてください。
ここは、画像を載せきれないので、ご自身で・・・
F8を押しながら
変数iの値を確認しながら
セルに値が入る事を確認してください。
今度は、C列の金額を消してから、
実行F5で一気に動かしてみて下さい。
一瞬で計算される事が分かります。
For~Nextの補足説明
繰り返したい処理
Next
変数が1ずつ増えるばかりでは不便なこともあります。
例えば、
1,3,5,7,・・・
のように2ずつ増やしたいとか、
11,10,9,8,・・・
のように、1ずつ減らしたいとか、
そのような書きかたもVBAには用意されています。
繰り返したい処理
Next
前者は、2,4,6,8,10
後者は、11,10,9,8,7,6,5,4,3,2
と変わりながら処理されていきます。
VBAコードの書き方について
記事の行数が多くなりすぎてしまい、他の重要な説明文が埋もれてしまう危険がありますので。
しかし、この書き順はとても重要です、何度か練習して、しっかり手に覚えさせてください。
特に、
ForとNextの間は、TABで1段さげる
今後もサンプル画像等のインデントを、そのまま同じように記述することを心がけてください。
ExcelマクロVBA入門の対応ページ
第16回.繰り返し処理(For Next)
VBEの使い方:デバッグ
同じテーマ「マクロ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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。