Excel VBAで複数のセルを一括処理する際、よくある課題の一つが「空白セルをどう扱うか」です。
例えば、次のような場面に心当たりはないでしょうか?
- 数値が入力されているセルだけを合計したい
- 記入済みの行だけを他のシートへ転記したい
- 空白のセルには何もせず、次の処理に進みたい
このような場合に有効なのが、VBAのIf
文による条件分岐です。本記事では、**「セルが空白であれば処理をスキップする」**ための基本的な考え方と、実用的なコード例を2種類ご紹介いたします。
空白セルの判定方法は主に2つ
セルが空白かどうかを判断する方法は、主に以下の2通りです。
1. IsEmpty
関数を使う方法
IsEmpty
関数は、セルが「完全に何も入力されていない状態」であるかどうかを判断します。数式が入力されていて、結果が空欄である場合はFalse
を返します。
2. ""
(空文字列)との比較
セルの値が""
(空文字列)であれば空白とみなす方法です。こちらは、数式の結果が空文字列となっているセルも「空欄」として扱われます。
コード例①:空白セルを除外して合計する(IsEmptyを使用)
Option Explicit
Sub SumNonBlankCells()
Dim rngTarget As Range
Dim c As Range
Dim total As Double
Set rngTarget = Sheet1.Range("A1:A100")
For Each c In rngTarget
If Not IsEmpty(c.Value) Then
total = total + Val(c.Value)
End If
Next c
MsgBox "入力済みセルの合計は " & total & " です。", vbInformation
End Sub
解説
このコードは、シートのA1~A100までの範囲内にある「空でないセル」だけを集計しています。IsEmpty
関数により、完全に未入力のセルのみを除外しています。
コード例②:記入済みの行だけを別シートへ転記(空文字列で判定)
Option Explicit
Sub CopyFilledRows()
Dim wsSrc As Worksheet
Dim wsDst As Worksheet
Dim lastRow As Long
Dim dstRow As Long
Dim i As Long
Set wsSrc = Worksheets("Sheet1")
Set wsDst = Worksheets("Sheet2")
lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
dstRow = 1
For i = 1 To lastRow
If wsSrc.Cells(i, "A").Value <> "" Then
wsSrc.Rows(i).Copy Destination:=wsDst.Rows(dstRow)
dstRow = dstRow + 1
End If
Next i
MsgBox "転記が完了しました。", vbInformation
End Sub
解説
このマクロは、A列にデータがある行のみを別シート(Sheet2)に転記します。""
との比較により、数式が返す空白文字列のセルも「空白」とみなしてスキップされます。
判定方法の使い分け
判定方法 | 向いているケース |
---|---|
IsEmpty | 数式などが入っていても「未入力セルだけ」を判別したい場合 |
"" 比較 | 数式の結果が空でも「空欄扱い」したい場合 |
どちらを使うかは、シートの構成や目的に応じて柔軟に選ぶのがポイントです。
まとめ
Excel VBAで「空白セルはスキップして処理を行いたい」といった要件は非常に多く、If
文による条件分岐を取り入れることで、処理効率やエラー回避が大きく改善されます。
今回ご紹介したような基本的な書き方をマスターしておけば、実務におけるマクロ作成の幅がぐっと広がります。