ある条件に一致するセルだけを参照して操作する方法に、Range オブジェクトの SpecialCells メソッドを利用する方法があります。
SpecialCells メソッドの引数にセルの種類を指定して、空白セルや数式セルを参照することができます。
空白セルの参照
次のコードを実行するとデータが入力できます。(書式は設定してください。)
■ コード内を「Wクリック」で選択できます。
Sub データ5370_1() <pre><code>Range("A1") = "売上表" Range("A3") = "日付" Range("B3") = "分類" Range("C3") = "品名" Range("D3") = "単価" Range("E3") = "個数" Range("F3") = "合計" Range("A4") = "2021/10/1" Range("B4") = "C1" Range("C4") = "封筒" Range("D4") = 5000 Range("E4") = "" Range("F4") = "=D4 * E4" Range("A5") = "2021/10/2" Range("B5") = "C2" Range("C5") = "メモ帳" Range("D5") = 3500 Range("E5") = 12 Range("F5") = "=D5 * E5" Range("A6") = "2021/10/3" Range("B6") = "S1" Range("C6") = "名刺セット" Range("D6") = 4500 Range("E6") = 10 Range("F6") = "=D6 * E6" Range("A7") = "2021/10/4" Range("B7") = "D1" Range("C7") = "ネームペン" Range("D7") = 2200 Range("E7") = 12 Range("F7") = "=D7 * E7" Range("A8") = "" Range("B8") = "D2" Range("C8") = "ネームペンセット" Range("D8") = 3200 Range("E8") = "" Range("F8") = "=D8 * E8" Range("A9") = "2021/10/5" Range("B9") = "S1" Range("C9") = "名刺セット" Range("D9") = 4500 Range("E9") = 8 Range("F9") = "=D9 * E9"</code></pre> End Sub

空白セルの参照
CurrentRegionプロパティで、表を選択します。
■ コード内を「Wクリック」で選択できます。
Sub サンプル5370_2() <pre><code>Range("A3").CurrentRegion.Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Interior.Color = RGB(0, 0, 255)</code></pre> End Sub
• Range(“A3”).CurrentRegion.Select
’セルA3を基準に表を選択します。
• Selection.SpecialCells(xlCellTypeBlanks).Select
’空白のセルを選択します。
• Selection.Interior.Color = RGB(0, 0, 255)
’空白セルの背景を「青」にします。
■ マクロの実行結果


SpecialCellsの引数
Type | 説明 |
---|---|
xlCellTypeBlanks | 空白のセル |
xlCellTypeComments | コメントを含むセル |
xlCellTypeConstants | 定数のセル |
xlCellTypeFormulas | 数式のセル |
xlCellTypeVisible | 可視セル |
Value | 説明 |
---|---|
xlErrors | エラー値 |
xlLogiccal | 論理値 |
xlNumbers | 数値 |
xlTextValues | 文字 |
セルの文字や数値を削除する
■ コード内を「Wクリック」で選択できます。
Sub サンプル5370_3() <pre><code>Range("A4:F9").SpecialCells(xlCellTypeConstants, _ xlNumbers + xlTextValues).ClearContents Range("A4:F9").Interior.Pattern = xlNone</code></pre> End Sub
• Range(“A4:F9”).SpecialCells(xlCellTypeConstants, _
xlNumbers + xlTextValues).ClearContents
’セルA4~セルF9を選択して、文字と数値を削除します。
• Range(“A4:F9”).Interior.Pattern = xlNone
’セルA4~セルF9を選択して、背景色を元に戻します。
■ マクロの実行前

■ マクロの実行結果
F列に入っている「数式」は削除されません。

データの無い行を削除する
次の表でA列を指定して、データの無い行を削除します。

■ コード内を「Wクリック」で選択できます。
Sub サンプル5370_4() <pre><code>Range("A4:A9").SpecialCells(xlCellTypeBlanks) _ .EntireRow.Delete</code></pre> End Sub
• Range(“A4:A9”).SpecialCells(xlCellTypeBlanks) _
.EntireRow.Delete
’セルA4~セルA9を指定します。
EntireRow.Deleteで行の位置を指定して削除します。
■ マクロの実行結果
A列の8行目が削除されました。

次の表でE列を指定して、データの無い行を削除します。

■ コード内を「Wクリック」で選択できます。
Sub サンプル5370_5() <pre><code>Range("E4:E9").SpecialCells(xlCellTypeBlanks) _ .EntireRow.Delete</code></pre> End Sub
■ マクロの実行結果
E列の4行目と8行目が削除されました。

以上で「空白セルや数式セルの参照」の説明を終わります。