For Each で1行ずつ処理する
先日は、テーブルで特定の列を処理する方法を幾つか紹介した。
infoment.hatenablog.com
今日は、For Each で1行ずつ処理する場合についてのご紹介。
例えば、こんな表でのお話。
A列がリンゴの行だけ、赤で塗り潰したいとする。昔は、こんな風に書いていた。
Sub Test①() Dim i As Long Dim LastRow As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To LastRow If Cells(i, 1) = "りんご" Then Range(Cells(i, 1), Cells(i, 1).End(xlToRight)).Interior.Color = vbRed End If Next End Sub
求める結果が得られる以上、これでも問題は無いと考える。
一方で、指定範囲が「複数の行が積み重なったもの」と捉えれば、このような表記も可能となる。
Sub Test②() Dim list_row As Range For Each list_row In Range("A1").CurrentRegion.Rows If list_row.Cells(1) = "りんご" Then list_row.Interior.Color = vbRed End If Next End Sub
なお、テーブルの場合はまた違った表記となる。
どちらを用いるかは、時と場合とお好みで。
※「そんなの条件付き書式でやればいいじゃないか」という突っ込みは、今回無しでお願いします。
参考まで。