初めて自分の家と他人の家が違う、と意識した時

VBA初心者です。
数式の入った表で、数式を消さずに値のみクリアしたいのですが、、、

Sub 指定のセル範囲の値だけをクリアする()
Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents
Sheets("Sheet1").Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents
End Sub

とやってもうまくいきません。
どこか間違っていますか?

A 回答 (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 となります。
    • good
    • 2
この回答へのお礼

教えて頂いたとおりにやったらうまくいきました!!!
ありがとうございました。(^0^)

せっかく教えて頂いた、23の意味はちょっと理解できませんが、、
まだ、基本も分っていない状態ですのでもっと勉強します!

お礼日時:2008/02/17 16:06

こんにちは。



>どこか間違っていますか?

間違ってはいないはずですが、おそらくは、Range("A1:C5") の範囲内に、該当する「値のみ」のデータがないからだと思います。

>Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents

一般的には、こうした狭い範囲ではなく、Cells や Range("A1").CurrentRegion や UsedRange という広範囲にしたほうが良いのですが、それでも、見つからないことがありますから、その場合に備えて、#1 さんのおっしゃる On Error トラップを設けます。
    • good
    • 1
この回答へのお礼

ちゃんと動きました。
確かに、今は勉強のためにやっているので狭い範囲でやっていました。
実際の仕事では、もっと広い範囲を使ってデータの範囲は常に変わったりします。
教えていただいている、
Range("A1").CurrentRegion や UsedRange
で試しましたが、入力のしかたが間違っているのか、値は消えませんでした。もし、お願いできるようでしたら#1の方の、

On Error Resume Next
Range("A1:C5").SpecialCells(xlCellTypeConstants, "23").ClearContents
End Sub

でどのように変えたらいいか教えていただけないでしょうか...???
よろしくお願いいたします。m(_ _)m

お礼日時:2008/02/17 12:32

テストしてみました。


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 にしました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/17 12:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A