For Each で1行ずつ処理する ~テーブルの場合~
昨日は、For Each で1行ずつ処理する場合について紹介した。
infoment.hatenablog.com
今日は、テーブルの場合についてのご紹介。
本日も、こちらの表で試してみよう。
昨日は、指定範囲のなかの「Rows」(つまり、「行が集まったもの」)について、一行ずつ確認して処理を行った。しかしテーブルの場合、ListRowsコレクションが予め用意されているので、今日はこれを使ってみよう。
昨日と同様、A列が「りんご」の行だけ赤く塗りつぶしてみる。
Sub Test() ' 変数にテーブルをセット。 Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) ' テーブル内の各行について、繰り返し処理。 Dim ListRow As Excel.ListRow For Each ListRow In Tb.ListRows If ListRow.Range.Cells(1) = "りんご" Then ListRow.Range.Interior.Color = vbRed End If Next End Sub
なお、ListRowは「行そのもの」であって、「その行の範囲」ではない。従って、行内の値を確認したり着色したりするためには、
ListRow.Range
のように記し、指定行のRangeオブジェクトに対して情報を取得したり着色したりということになる。と、今のところ理解している(超保険的補記)。
これも覚えておくと、何かと重宝する。お勧めです。
参考まで。