Top

hiroyuki.tank.support.site

簡単!マクロ講座

第44回〜あてな-Loop解説〜


 前回書いたコードの解説です。
*******************************************************************************
1 i = 1
2  Do Until Cells(datagyo, 2) = ""
3   If Cells(datagyo, 1) = "レ" Then
4     Range(Cells(datagyo, 2), Cells(datagyo, 6)).Select
5     Selection.Copy
6     Sheets("入力").Select
7     Cells(i + 1, 1).Select
8     ActiveSheet.Paste
9     Sheets("データ").Select
10    Application.CutCopyMode = False
11    i = i + 1
12  End If
13   datagyo = datagyo + 1
14 Loop
*******************************************************************************

1-変数「i」に初期値「1」を入れる。
 iという記号については後ほど説明します。
2-Cells(datagyo, 2)が""だったら。
 変数datagyoの初期値を2にしていますから1回目ここをプログラムが通過するときは変数datagyoは2ですから,「2行目の2列目(B2)のセルになにも入っていなかったら」ということになります。
3-もしCells(datagyo, 2)が"レ"だったら。
 変数datagyoの初期値を2にしていますから1回目ここをプログラムが通過するときはdatagyoは2ですから,「2行目の1列目(A2)のセルが"レ"だったら」ということになります。
 2行目の1列目のセルが"レ"ではなかったら12の End If にジャンプします。
 このIf構文は入れ子になっています。If構文の中にIf構文があるものです。ネストとも呼びます。ネストはエクセルの関数でももちろん使えます。
4-Cells(datagyo, 2)が"レ"だったらの処理です。
 セルdatagyo行目(最初はdatagyoは2なので2行目)の2列目からdatagyo行目の6列目(最初はB2:F2となります)の範囲を選択。
5-コピー。
6-シート「入力」を選択。
7-セル i+1行目の1列目を選択。
 1で i は初期値1をいれていますから,1+1=2で2行目の2列目となります。
8-貼り付け。
9-シート「データ」を選択。
10-コピーモードを解除。
11-変数 i に1を加える。
12-If構文ここで終わり。
13-変数 datagyo に1を加える。
14-繰り返し。
 ここで2から繰り返します。

 2回目に2のところを通過するときは,datagyoは最初通過した時の2に1を加えられていますから3になっています。とすると,3行目の2列目になにも入っていないかどうかを判断することになります。次の If構文では3行目の1列目に"レ"が入っているか否かを判断することになります。
 このようにしてループによってデータがあるだけチェックし,"レ"が入っている行だけをコピー貼り付けするわけです。

 変数 i とはなにかについて解説します。
 この変数はシート「入力」の何行目にデータを貼り付けるか判断するためにあります。
 もしこの i がなかったらデータをコピーしたのはいいけどどこに貼ったらいいのかわかりません。いつも2行目に貼っていたのではいつまでたっても1人目の人しかラベルに表示されません。

 ループの中でぐるぐる回っている動作をしているとき,何回まわったかを数える必要がある場合がでてきます。
 繰り返した数を数える変数,これを「カウンタ」とか「カウンタ変数」と呼ばれます。 カウンタ変数といっても普通の変数と同じと思ってもらってかまいません。
 通常カウンタ変数は「i」とか「j」を使います。なぜって?そういうもんらしいです。

 「今回は行を数えているだけじゃん」と思われた方。よくわかってらっしゃる。
 行を数えるのもカウンタの役目でしょうが,実はこのあとこの i が本来のカウンタそのものの役割を担っている場面が出てきます。

| hiroyuki.tank.support.site.Top | このページのTop | マクロ講座目次 | 前回 | 次回 |