• 締切済み

VBA 数式を残して値をクリアについて

VBA初心者です。 数式の入った表で、数式を消さずに値のみクリアしたいのですが、、、 Sub 指定のセル範囲の値だけをクリアする() Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents Sheets("Sheet1").Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents End Sub とやってもうまくいきません。 どこか間違っていますか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >入力のしかたが間違っているのか、値は消えませんでした。 私は、以下のような書き方をします。 Sub Tests() On Error Resume Next With ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 23)  .ClearContents End With End Sub UsedRange は、シートのデータある範囲すべてをカバーします。 しかし、SpecialCells の不思議なところは、1つのセルを対象にして以下のようにしても同じになります。 On Error Resume Next With ActiveSheet.Range("A1").SpecialCells(xlCellTypeConstants, 23)   .ClearContents End With そこで、 With ActiveSheet.Range("A:Z").SpecialCells(... とすると、A列からZ列までの対象とすることも出来ます。 ちなみに、SpecialCells の中の 23 の意味はご存知ですか? XlSpecialCellsValues クラスの   1 xlNumbers  ←引数は、Integer型   2 xlTextValues   4 xlLogical   16 xlErrors ----------------- 合計:23 Dim arg As Integer arg = xlErrors Or xlLogical Or xlNumbers Or xlTextValues とすると、ビット演算で、arg =23 となります。

ryuko0916
質問者

お礼

教えて頂いたとおりにやったらうまくいきました!!! ありがとうございました。(^0^) せっかく教えて頂いた、23の意味はちょっと理解できませんが、、 まだ、基本も分っていない状態ですのでもっと勉強します!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >どこか間違っていますか? 間違ってはいないはずですが、おそらくは、Range("A1:C5") の範囲内に、該当する「値のみ」のデータがないからだと思います。 >Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents 一般的には、こうした狭い範囲ではなく、Cells や Range("A1").CurrentRegion や UsedRange という広範囲にしたほうが良いのですが、それでも、見つからないことがありますから、その場合に備えて、#1 さんのおっしゃる On Error トラップを設けます。

ryuko0916
質問者

お礼

ちゃんと動きました。 確かに、今は勉強のためにやっているので狭い範囲でやっていました。 実際の仕事では、もっと広い範囲を使ってデータの範囲は常に変わったりします。 教えていただいている、 Range("A1").CurrentRegion や UsedRange で試しましたが、入力のしかたが間違っているのか、値は消えませんでした。もし、お願いできるようでしたら#1の方の、 On Error Resume Next Range("A1:C5").SpecialCells(xlCellTypeConstants, "23").ClearContents End Sub でどのように変えたらいいか教えていただけないでしょうか...??? よろしくお願いいたします。m(_ _)m

回答No.1

テストしてみました。 Sub 指定のセル範囲の値だけをクリアする() On Error Resume Next Range("A1:C5").SpecialCells(xlCellTypeConstants, "23").ClearContents End Sub ちゃんと動きます。 うまくいきません。は具体的にどのようになるのですか? エラーになる?クリアされない? A1:C5に入っている数式は、A1:C5の範囲外を参照していませんか? 範囲外の参照されるセルもクリアしないとだめです。 範囲内のセルに値が入っていないと、(クリアした直後など) 「該当するセルが見つかりません。」 のエラーが出ますので、 On Error Resume Next を付けました。 expression.SpecialCells(Type, Value) のTypeにxlConstants でも動きましたが、 ヘルプで説明されているように、xlCellTypeConstants にしました。

ryuko0916
質問者

お礼

教えていただいたとおりにやったところ ちゃんと動きました!!! どうもありがとうございました!助かりました。

関連するQ&A