For Each で1行ずつ処理する ~テーブルの場合~

昨日は、For Each で1行ずつ処理する場合について紹介した。
infoment.hatenablog.com

今日は、テーブルの場合についてのご紹介。
f:id:Infoment:20190823213719p:plain

本日も、こちらの表で試してみよう。
f:id:Infoment:20190823214331p:plain

昨日は、指定範囲のなかの「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オブジェクトに対して情報を取得したり着色したりということになる。と、今のところ理解している(超保険的補記)。

これも覚えておくと、何かと重宝する。お勧めです。

参考まで。