一体終わりはどこなんだ??

Excelマクロの最大のメリットの一つである、
繰り返し処理について、僕がよく使う手法をご紹介致します。

データがA列に1〜10まで入っていたとします。
f:id:basara_reond:20110218145454p:image

この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 + ↑を押したときのセルの位置と
同じ意味になります。

実行すると、、、
f:id:basara_reond:20110218145453p:image

見事最終行番号である、"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文を使って、
簡単な繰り返し+条件分岐を解説してきます。


では〜〜