- 締切済み
VBA 数式を残して値をクリアについて
VBA初心者です。 数式の入った表で、数式を消さずに値のみクリアしたいのですが、、、 Sub 指定のセル範囲の値だけをクリアする() Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents Sheets("Sheet1").Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents End Sub とやってもうまくいきません。 どこか間違っていますか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >入力のしかたが間違っているのか、値は消えませんでした。 私は、以下のような書き方をします。 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 となります。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >どこか間違っていますか? 間違ってはいないはずですが、おそらくは、Range("A1:C5") の範囲内に、該当する「値のみ」のデータがないからだと思います。 >Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents 一般的には、こうした狭い範囲ではなく、Cells や Range("A1").CurrentRegion や UsedRange という広範囲にしたほうが良いのですが、それでも、見つからないことがありますから、その場合に備えて、#1 さんのおっしゃる On Error トラップを設けます。
お礼
ちゃんと動きました。 確かに、今は勉強のためにやっているので狭い範囲でやっていました。 実際の仕事では、もっと広い範囲を使ってデータの範囲は常に変わったりします。 教えていただいている、 Range("A1").CurrentRegion や UsedRange で試しましたが、入力のしかたが間違っているのか、値は消えませんでした。もし、お願いできるようでしたら#1の方の、 On Error Resume Next Range("A1:C5").SpecialCells(xlCellTypeConstants, "23").ClearContents End Sub でどのように変えたらいいか教えていただけないでしょうか...??? よろしくお願いいたします。m(_ _)m
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
テストしてみました。 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 にしました。
お礼
教えていただいたとおりにやったところ ちゃんと動きました!!! どうもありがとうございました!助かりました。
お礼
教えて頂いたとおりにやったらうまくいきました!!! ありがとうございました。(^0^) せっかく教えて頂いた、23の意味はちょっと理解できませんが、、 まだ、基本も分っていない状態ですのでもっと勉強します!