一体終わりはどこなんだ??
Excelマクロの最大のメリットの一つである、
繰り返し処理について、僕がよく使う手法をご紹介致します。
この10個分繰り返し処理をしたいとした場合、
For Next ステートメントか、
Do Loop ステートメントを使うかさらに別の手段を使うか、、
と繰り返し処理は多くの手段がありますが、
ここではFor Nextステートメントを使った場合で説明していきます。
For Nextステートメントは、
カウンタ変数にはじめと終わりを指定して、
整数で+1されたものが順番に入る、というものです。
(Stepを使うことにより-1や+2以上も出来ますが、デフォルトは+1です。)
この場合、終わりは10なので、
For i = 1 to 10
'-------ここに繰り返される処理を書く
Next i
とすれば良さそうです。
デスガ・・・!!
今回はそれで良いかもしれませんが、
別のデータが10では無かったらどうしましょう・・・
この処理を度々行うのに、いちいち書きかえるのは、
面倒極まりありませんし、間違える可能性もあります。
ここは、終わりを変数によって取得しましょう!!
そこで登場するのが、次のコードです。
Option Explicit
Sub TEST1()
Dim myrow As Integer
myrow = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox myrow
End Sub
これは変数myrowにA列の終端の行番号を代入しています。
Cells(Rows.Count, 1).End(xlUp).Row・・・・これが終端を取得しています。
Rows.Count ----------これはExcelの最終行番号を取得しています。
(Excel2003であれば65536 2007以降であれば1048576)
End(xlup) -----------指定したセルからデータの入っているセルまで飛んだ場合の
セル位置を表します。
引数xlupは上方向、xldownは下方向、xltoleftは左、xltorightは右方向となります。
.Row ----------------指定したセルの行番号を取得します。
Msgbox ---------------指定したものをダイアログボックスで表示します。
ということは・・・
Cells(最終行,A列)から上方向に飛んだ際、データが入っているセルの行番号
となります。
つまり、Excel2003で言えば、A65536からCtrl + ↑を押したときのセルの位置と
同じ意味になります。
見事最終行番号である、"10"を取得出来ました。
これで、
Option Explicit
Sub TEST1()
Dim myrow As Integer
myrow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 to myrow
'-------ここに繰り返される処理を書く
Next i
End Sub
とすれば、必要な分だけ繰り返してくれます。
次回はFor NextステートメントとIf文を使って、
簡単な繰り返し+条件分岐を解説してきます。
では〜〜