アプリ版:「スタンプのみでお礼する」機能のリリースについて

Range(”A1:A6”)にデータが入っていますが、そのうちA3、A4、A5セルは
結合されています。Range(”A1:A6”)のデータをクリアするために以下
コーディングをしましたが、結合セルの先頭でエラー(実行時エラー 1004)に
なってしまいます。
結合セルのデータクリアはどのようにすればいいのでしょうか。
お分かりの方よろしくご教示ください。

Sub Sample()
Dim i As Long
For i = 1 To 6
Cells(i, 1).ClearContents
Next i
End Sub

A 回答 (8件)

横から失礼。


ちょっと不思議な展開のような気がしてます。

Range("A1").Value = ""
セルの表示形式が文字列の場合は本当の空白セルになりませんよね?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MsgBox IsEmpty(Range("A1"))
それに
Range("A65536").End(xlUp).Select

そもそも
Range("A1:A6").ClearContents

私が何か勘違いしてるのかしらん?

#ひょっとしてA3:A5が結合してるのではなくてそれぞれが横方向に結合してたりするのかなぁ。
#その場合でもRange("A1:A6").Value = Emptyで良いはずだけど。
    • good
    • 1
この回答へのお礼

解答ありがとうございました。
話が難しくなってきましたが、結局、一部(A3:A5)が結合している範囲(A1:A6)のデータをクリアするには、(1)または(2)が良いということでしょうか。
(1)Range("A1:A6").Value = Empty 
(2)Range("A1:A6").MergeArea.ClearContents

お礼日時:2009/12/04 22:27

myRangeです。



Empty、失念しておりました。。(^^;;;

何れにしろ当方のコメントで質問者を混乱させてしまったようで
申し訳ありませぬ。

で、ちょと整理してみますと、セルA3:A5が結合セルとして。
 
●ClearContentsメソッドは結合セルの一部を指定できない●

Range("A3:A5").ClearContents

のように結合セル全セルを指定するのはいいが、
質問者のコードのように
  range("A3").ClearContents
と、結合セルの一部指定はできない。

  Range("A1:A6").ClearContents

これは、結合セル(A3:A5)が全て含まれているのでOK。

このようにClearContentsメソッドで結合セルをクリアーする場合は
そこら辺りの煩わしさがあるので、あっさりと
 
  Range("A1:A6").Value = Empty

Emptyを代入した方がいいのかも知れません。
 
------------------------------------------------------
今回は改めて基本的な事柄を再確認することができ
end-uさん、MackyNo1さん、質問をしてくださったyamato99さん
お三方に感謝せねばなりません。
ありがとうございました。

以上です。
 
    • good
    • 0
この回答へのお礼

最後に整理していただき、ありがとうございました。
いろいろ勉強になりました。
これからもよろしくお願いします。

お礼日時:2009/12/05 18:06

>Range("A1").Value = ""


セルの表示形式が文字列の場合は本当の空白セルになりませんよね?

end-uさん、ご指摘ありがとうございます。
ご指摘のように、文字列のセルには、空白文字列が代入されてしまいますね。

私は、VBAについては入門書を読んだだけで、ほとんど参考書を読まず、必要に応じて試行錯誤して実戦的に覚えた自己流のマクロなので、実際に不都合が発生するまで問題に気がつかないこともたびたびありました(それで少しずつノウハウがわかるようになってきましたが)。

今回のようなコードを使用した場合はRange("A65536").End(xlUp).Selectなどで最下行セルを特定するときなどに、確かに問題が発生する可能性がありますね。

これまでは、どうにか解決するという場当たり的な対応していましたが、これを機会に少し上級の参考書でVBAを基本から勉強してみようかと思っています。
    • good
    • 0

いえ。


『一部(A3:A5)が結合している範囲(A1:A6)のデータをクリアするには』
Range("A1:A6").ClearContents
です。
    • good
    • 0

MackyNo1さん、


的確なご指摘、感謝しまします。

仰るとおりです。
エクセル側とVBAをごちゃまぜにしていたようです。(^^;;;

質問者さん、回答2の
「数値が入るべきセルに””を入れると拙い場合云々」
は無視願います。
 

MackyNo1さんの回答は勉強になるものが多いので
目につくと必ず見るようにしています。
これからも目から鱗の回答期待しています。
今回はありがとうございました。
以上です。
    • good
    • 0

MyRangeさん



>●長さ0の文字列””を代入する場合
>数値が入るべきセルに””を入れると拙い場合がありますよね。

VBAの「""」は関数で使用する場合の「""」と違って、本当の空白セルになると思うのですが(「=TYPE(A1)」で1が返ります)、どのような場合に不都合がでるのでしょうか?
後学のために教えていただけると幸いです。
    • good
    • 0

ClearContentsと""(長さ0の文字列)は、


クリアーといっても意味が違いますので。。

●ClearContentsを使う方法
この方がセルの内容が初期値になるのでお勧めです。
'-----------------------------------------------
Sub test11()
 Dim i As Long
 For i = 1 To 6
   Cells(i, "A").MergeArea.ClearContents
 Next i
End Sub
'----------------------------------------------

●長さ0の文字列””を代入する場合
数値が入るべきセルに””を入れると拙い場合がありますよね。
'--------------------------------------
Sub test22()
Range("A1:A6").Value = ""
End Sub
'--------------------------------------

以上です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
ClearContentsを使う方法を使ってうまく行きました。
これからもよろしくお願いします。

お礼日時:2009/12/04 09:05

Cells(i, 1).ClearContents



Cells(i, 1).Value = ""

のようにしてはいかがでしょう
    • good
    • 0
この回答へのお礼

早々の回答ありがとうございました。
MackyNo1 の回答でもやってみましたが、うまく行きました。
数値項目だった場合でも表示形式は変わりませんので、
これもうまいやり方ですね。
これからもよろしくお願いします。

お礼日時:2009/12/04 09:17

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