使用環境
- OS:Windows 10 Pro(バージョン:20H2)
- ソフト:Microsoft Excel VBA
経緯
データを抽出する際に、不要な値(1200以上)が含まれていたため、これまで手動で削除していました。
作業の効率化を図るため、VBAで1200以上のセルを自動で空白にする処理を学びました。
解決方法:分岐とループを組み合わせる
対象は、I4セルから下方向に連続するデータです。
以下のようにプログラムを書きました。
コード例
Sub 1200以上を空白にする()
Dim r As Long
Dim i As Long
r = Range("I4").End(xlDown).Row
i = 4
For i = i To r
If Cells(i, 9).Value > 1200 Then
Cells(i, 9).Value = ""
End If
Next i
End Sub
コード解説
- 1行目:
r
に、I4セルから下方向の最終行番号を代入しています。 - 2行目:カウンター変数
i
に「4」を設定します。これはI4セルが開始地点であるためです。 - 3行目:
For
ループを開始し、4行目から最終行まで1行ずつ処理します。 - 4行目:
If
文で、I列(9列目)の値が1200より大きいかを判定します。 - 5行目:1200以上であれば、そのセルの値を空白(
""
)にします。 - 6行目:
If
文終了。 - 7行目:次の行へ進みます。
この処理が、最終行(r行目)まで繰り返されます。
失敗談と気づき
最初はRange()を使って処理しようと試みましたが、うまくいきませんでした。
Rangeは範囲全体を一括で操作するには便利ですが、個別に1セルずつ条件判定するにはやや扱いにくい場面もあります。
一方、**Cells(row, column)**を使うことで、行・列を数字で直接指定できるため、今回のようなループ処理との相性が良いことを改めて実感しました。
Rangeでも工夫すればできる方法はありますので、今後さらに学んでいきたいと思います。
まとめ
VBAで特定の条件を満たすセルを空白にするには、
Cells(row, column)
を使ってセルを指定するIf
文とFor
ループを組み合わせる
のが基本的なアプローチとなります。
作業を手動で行うより、VBAを使うことで大幅に時間を短縮できるので、積極的に活用していきたいと思います。
ここまでお読みいただき、誠にありがとうございました。