フィルタで絞り込んだ行に対して処理を行う。

膨大な行数のテーブルに対して,ある条件でフィルタをかけて抽出したデータについて一括処理をしたい場合のコードです。
簡単な例として,上のテーブルで,建設年次が不明な橋梁を絞り込んで抽出し,それらの橋梁の建設後経過年数を高度経済成長期に建設されたと仮定してランダムに設定します。

End Sub
[/crayon]

〔10〜11行目〕

建設年次の列の番号を指定して,1つめの条件が「不明」に一致するものをフィルタの条件としています。

〔14行目 For Each C In の後〕

経過年数の列(ListColumns)内のデータ(DataBodyRange)のうち,見えているセル(SpecialCells(xlCellTypeVisible))だけを対象に,その範囲のセルをひとつづつループの対象にします。
このループの中で,18行目のようにセルに対する処理を行います。

処理結果

なお,このページの画像キャプチャはMac OSX版のExcel2011を用いて作成しています。Mac Excel 2011のVBA機能はWindows版との互換性がかなり低いですが,この程度であれば十分動くようです。

関連記事