ワークシートには、さまざまなデータが入力されます。
計算のもとになる数値が入力されているセルもあれば、その数値を使って計算を行う数式が入力されているセルもあります。
そうしたワークシートから、数値が入力されているセルだけをクリアするにはどうしたらいいでしょう。
ここではわかりやすく、セル範囲A1:A9に数値が入力され、隣のセル範囲B1:B9にはA列の数値を計算する数式が入力されているものとします。
2つの方法が考えられます。
1つめは、使用しているセル範囲を1セルずつチェックして、数式が入力されているかどうかを確認する方法です。
セルに数式が入力されているかどうかは、RangeオブジェクトのHasFormulaプロパティで判定します。
Sub Sample1()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If Not c.HasFormula Then
c.ClearContents
End If
Next c
End Sub
ただし、これではタイトル行などの文字列もクリアされてしまいますので、さらに「セルの値が数値がどうか」を判定した方がいいでしょう。
Sub Sample2()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If Not c.HasFormula And IsNumeric(c.Value) Then
c.ClearContents
End If
Next c
End Sub
Excelには、特定のデータだけを選択する機能があります。
[編集]-[ジャンプ]を実行して[ジャンプ]ダイアログボックスを開き、[セル選択]ボタンをクリックすると[選択オプション]ダイアログボックスが表示されます。
ここで特定のセルだけを選択することができます。
この機能を使うのが、2つめの方法です。
[選択オプション]ダイアログボックスで特定のデータだけ選択する操作をマクロ記録してみましょう。
ここでは[定数]をオンにして、さらに[数値]だけをオンにします。
実行すると、次のようなコードが記録されます。
Sub Macro1()
Selection.SpecialCells(xlCellTypeConstants, 1).Select
End Sub
SpecialCellsメソッドが、特定のセルだけを返すメソッドです。
引数に指定した定数xlCellTypeConstantsは「定数が入力されている」セルを指定し、2番目の引数1が「数値が入力されている」セルを特定しています。
本来、SpecialCellsメソッドの第2引数には定数を指定できるのですが、マクロ記録ではなぜか数値が記録されるようです。
SpecialCellsメソッドを使ったマクロは次のようになります。
Sub Sample3()
ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 1).ClearContents
End Sub
ただし、SpecialCellsメソッドは、指定した条件のセルが見つからないときエラーとなりますので注意が必要です。