表の中で数式の入っていないセルだけ空白にする方法

VBAセルの操作 VBA
VBAセルの操作

スポンサーリンク


スポンサーリンク


スポンサーリンク

計算式が入ったセルだけ残して値だけを削除

エクセルを使っていて様々な表を作成しますが、入力済みデータをまとめて一括削除したいことありませんか?

入力済みセルの値を消すのが少しならばいいですが、複数のシートやたくさんのデータ量があったり、表の中で数式が入っているセルと直接数字などを打ち込んでいるセルが複雑に入り組んでいたりすると非常にめんどくさいですね。

Excel-VBAを理解するまでの時は、削除するセルは数式が入っていないセルだけなので、こんな作業。

ワークシートの消したいセルを選んで【右クリック】➡【数式と値のクリア】を選んで消していました。

ところがExcel-VBAを使いながら日々エクセルと向き合うと、解決法が簡単に見つかりました。

方法は2つあります。

  1. ClearContentsメソッドを使う
  2. SpecialCellsメソッドを使う

ClearContentsメソッドでもSpecialCellsメソッドでも記述はちょっとことなりますが、どちらでも入力済みデータを削除して空欄セルにすることができます。

ClearContentsメソッドを使う

ClearContentsメソッドを使う場合は、予め指定したセルを空欄にすることになります。

その為に、数式が入っていても誤って指定してしまうと当然空欄になってしまいますので、ClearContentsメソッドを使って空欄にする場合は、セルの範囲を慎重に選んで指定してくださいね。

ここでは、ユーザーフォーム上に配置したコマンドボタンをクリックした場合を書いています。

開いているワークシート上の場合

Private Sub CommandButton1_Click()
Range(“A1”).ClearContents
End Sub

  1. コマンドボタン(CommandButton1)をクリックしたら
  2. セルA1を空欄にする
  3. 終了

指定したシートの場合

Private Sub CommandButton1_Click()
Worksheets(“Sheet1”).Range(“A1”).ClearContents
End Sub

  1. コマンドボタン(CommandButton1)をクリックしたら
  2. シート名(Sheet1)のセルA1を空欄にする
  3. 終了

指定したシート上の特定の範囲を空欄にする

この方が実用的かな。

Private Sub CommandButton1_Click()
Worksheets(“Sheet1”).Range(“A1:D10”).ClearContents
End Sub

  1. コマンドボタン(CommandButton1)をクリックしたら
  2. シート名(Sheet1)の選択した範囲セルA1からD10を全て空欄にする
  3. 終了

指定したシート上の複数の特定の範囲を空欄にする

これを一番多く使っています。

Private Sub CommandButton1_Click()
Worksheets(“Sheet1”).Range(“A1:D10,G1:J10”).ClearContents
End Sub

  1. コマンドボタン(CommandButton1)をクリックしたら
  2. シート名(Sheet1)の選択した範囲セルA1からD10とG1からJ10を全て空欄にする
  3. 終了

そんなに難しくないですよね

SpecialCellsメソッド

SpecialCellsメソッドを使って空欄セルを範囲内から探して空欄セルに値を入れる方法でも書きましたが、0にできるならば数式が入っていないセルだけ削除できないものか考えていました。

いろいろ試していくうちに、このようなコードを書くと計算式が入ったセルだけ残して値だけを削除することができました。

Private Sub CommandButton1_Click()
Worksheets(“Sheet1”).Range(“A1:D10”).SpecialCells(xlCellTypeConstants, xlTextValue + xlNumbers).ClearContents
End Sub

  1. コマンドボタン(CommandButton1)をクリックしたら
  2. シート名(Sheet1)の選択した範囲セルA1からD10の中で定数が含まれているセルで数値が入っているセルで文字と数字を空欄にする
  3. 終了

先ほどのClearContentsメソッドとは違い、表全体を指定しても自動的に数式の入っていないセルのみ空欄にしてくれるのでコードを書くのも楽になりました。

ClearContentsメソッドを覚えるまでは、あちこちのセルを消すためにClearContentsメソッドをいくつもコードを書いていたので劇的に作業が早くなったものです。

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?

タイトルとURLをコピーしました