|
|
いろいろなループを使って、列に1〜10までの数字を入れるマクロを作ってみましょう。
1 For….Next
For….Nextを使って、A列に1から10までの数を入れるマクロを作ります。
Sub Macro1()
Dim I As Integer
I=0
Range("A1").Select
For I = 1 To 10 …(1)
Cells(I, 1).Value = 0 + I …(2)
Next
End Sub
(1)のCellsは前にも出てきましたが、セルの番地を表しています。Cells(1,1)はセルA1を、Cells(2,1)はセルA2を示します。したがって、(1)のIは0からではなく、1からにします。
(2)を変更してみましょう。(2)をActiveCell.Offset(I, 0).Value = 1 + Iと変えてみましょう。ActiveCell.Offset(行, 列)は、現在のセルから(行、列)ぶん移動するという命令です。実行してみましょう。セルA1が空白になってしまいました。(1)のI=1が悪いようです。I=0としてみましょう。今度はうまくいきました。I=1だと、最初から1行下へ移動するということになっていたからです。Cellsの場合と、ActiveCell.Offset( )の場合では、(1)の変数Iの初期値を変更する必要があります。
今度はちょっといたずらしてみましょう。先ほどのActiveCell.Offset(I, 0).Value = 1 + Iを2つに分けてみましょう。
ActiveCell.Offset(I, 0).Select
ActiveCell.Value = 1 + I
同じようにいくはずなのが、今度はずいぶん間延びしてしまいました。どうしてでしょう。
最初の変数Iは0なので、移動しません。次は、変数Iが1になるので、一つ下へ移動します。ところがその次は、変数Iが2になるので、二つ下へ移動してセルA4になってしまいます。一つとばし、二つとばし、三つとばしと次々に間が空いていってしまいます。原因は、Selectにあります。Selectは辞書では選択するという意味ですが、選択した結果移動してしまいます。アクティブセルを基準にしてIだけ移動するので、次々に間が空いてしまいます。一方ActiveCell.Offset(I, 0).Value = 1 + Iでは、常にセルA1を基準にしているので、間が空きません。
|
|