【VBA】.Deleteと.ClearContentsの違い|関数の範囲を崩さずに値だけ消す方法

はじめに

今回は、VBAでセルの値だけを消したい場合に、どのメソッドを使えばよいかについて勉強しました。
使用環境は以下のとおりです。

  • 使用OS: Windows 10 Pro
  • バージョン: 20H2

背景

VBAでA列の値を削除しようと思い、
以下のようなコードを使用しました。

Range("A1:A3").Delete

すると、意図しない動作が発生しました。
A列に設定していたAVERAGE(A1:A100)という数式の参照範囲が、
AVERAGE(A4:A100)にずれてしまったのです。

これは、.Deleteを使用するとセル自体が削除され、下のセルが詰められる動作が起こるためでした。

本来は、セル自体はそのままで値だけを消したいという要望だったため、別の方法を探しました。

解決策

次のように、.ClearContentsメソッドを使用することで解決できました。

Range("A4:A10").ClearContents

この方法では、セル自体は動かさずに、中身(値や数式)だけがクリアされます。
そのため、AVERAGE(A1:A100)の参照範囲が崩れることもありませんでした。

無事、やりたかった「値だけ消してセルの構造は維持する」という目的を達成できました。

.Delete.ClearContentsの違い

項目.Delete.ClearContents
動作内容セル自体を削除して、下のセルを上に詰めるセルの中身だけを消し、セル自体は残す
数式への影響参照範囲がずれる可能性あり参照範囲は変わらない
主な用途行・列を完全に削除したい場合内容だけをクリアしたい場合

まとめ

  • セルの値だけを消したい場合は、**.ClearContents**を使用する。
  • セル自体を削除して位置を詰めたい場合は、**.Delete**を使用する。
  • 数式への影響を避けたいときは、絶対に.Deleteを使わず、.ClearContentsを使うことが大切

今回の経験を通して、目的に応じた適切なメソッド選択の重要性を改めて実感しました。
これからも、一つひとつ確実にVBAの知識を深めていきたいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。