プロが教えるわが家の防犯対策術!

コードは以下のように記述してあります。

Worksheets("Sheet2").Activate 'Sheet2のセルをクリア

Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").MergeArea.ClearContentsb

別のシートの複数のセルをクリアしたいのですが、結合されたセルがクリアできないと
エラーがでます。
結合セルはD5:D6とF5:F6です。

何が間違っているのでしょうか?

Excel2013です。

A 回答 (3件)

こんにちは。

お邪魔します。


 > Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").MergeArea.ClearContents b
#文末の" b"についてはスルーしますが、
この書式で.MergeAreaプロパティを使うのは間違いです。
やや蛇足になりますが、そもそも.MergeAreaプロパティは、
今回の例でいえば、
  Range("D5").MergeArea.Select
単一セル(D5)を内包する結合セル範囲(D5:D6)を取得するような使い方が、
本来の目的であり、正しい使い方です。

本題です。
通常は、
  Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").ClearContents
という記述で、問題なく値の消去が実行されます。
必要なだけ整理した書き方として、
  Range("B5:B6,D5:D6,F5:G6,A10:M54").ClearContents
などでも問題ありません。
セル範囲の指定さえ間違っていなければ、
滅多にエラー(結合セルに纏わるエラー)を起こすような記述ではありません。

> 別のシートの複数のセルをクリアしたいのですが、結合されたセルがクリアできないと
> エラーがでます。
エラーが出たら、エラーメッセージの内容を正確に把握して伝えるようにすると、
回答者にとっても質問者にとっても、遠回りせずに済み、解決し易くなります。
ーーーーーーーーーーーーーーーーーーーーーーーーー
実行時エラー "1004":

結合されたセルの一部を変更することはできません。
ーーーーーーーーーーーーーーーーーーーーーーーーー
この↑ようなエラーメッセージだったのではないでしょうか?
もしそうだと仮定した場合の話、ですが、
> 結合セルはD5:D6とF5:F6です。
質問者さんが把握できていない結合セルが、
B5:B6,D5:D6,F5:G6,A10:M54 から食み出る(内外に跨ぐ)形で存在することが
可能性のひとつとして考えられます。
#こういう書き間違いを私も偶にやりますものですから、、、。
とりあえず、「食み出る結合セルの有無を確認するマクロ」を以下に挙げますので、
実際に動かして、表示されるメッセージを確認してみてください。

' ' ///

Sub Check8689170()
  Const sRef = "B5:B6,D5:D6,F5:G6,A10:M54" ' セル範囲参照、◆要確認(要指定)◆
  Dim Target As Range
  Dim c As Range
  Dim s As String

  Set Target = Worksheets("Sheet2").Range(sRef) ' シート名、◆要確認(要指定)◆
  For Each c In Target
    If c.MergeCells Then
      With c.MergeArea
        If .Count <> Application.Intersect(Target, .Cells).Count Then
          s = s & "," & .Address(0, 0)
        End If
      End With
    End If
  Next

  If s = "" Then
    MsgBox "セル範囲 " & vbLf & _
      vbTab & sRef & vbLf & _
      "は正しく指定できています。" & vbLf & _
      "(食み出る位置に結合セルはありません)。"
  Else
    MsgBox "セル範囲 " & vbLf & _
      vbTab & sRef & vbLf & _
      "から、食み出る位置に結合セルがあります。" & vbLf & _
      "食み出した結合セル" & vbLf & _
      vbTab & Mid(s, 2) & vbLf & _
      "を、確認の上、セル範囲の指定をやり直して下さい。"
  End If

  Set Target = Nothing
End Sub

' ' ///

以上の実行結果として、"正しく指定できています。"ということでしたら、
今回、私の想定は外れていたことになります。
その場合は、エラーの原因を特定する意味で、当初問題にされているエラーの
正確なエラーメッセージを補足欄にでも書き込んでみてください。
その際、注意深くシートを眺めてみて、何か変わったことをしてないか、
気が付いたことがあれば、併せて書いてみてください。

もしも、上記マクロを実行する気になれない、ということでしたらば、
簡単に、
  Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").Select
を実行してみて、実際に指定したい範囲と相違ないか、
シート上で目視することで、正しいかどうかの確認だけは出来ます。

因みに応用的な蛇足でもありますが、少し視点を変えて
  Range("B5:B6,D5:D6,F5:G6,A10:M54").Value = Empty
のような記述であれば、食み出る位置に結合セルがあってもなくても、
(結合セルが原因の)エラーは起きません。
(右や下に食み出る位置にある結合セルについては、値を消去し、
 上や左に食み出る位置にある結合セルについては、何もしない、
 というような目的に使える記述です。)
もし、これでもエラーが出るとなると、部分的なセルのロックとシート保護、
とか、他の原因を考えることになるかと思いますので、
問題を切り分ける意味では、この記述も試してみてください。
(いずれも、試す時は、加筆・編集せず、そのままの記述でお願いします。)

以上です。
    • good
    • 0

Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").ClearContents


でもこちらの環境では動作しますが、

MergeAreaを使うなら結合されているエリアとされていないエリアを分けた方がいいかもしれません。

’結合されていないエリア
Range("B5,B6,G5,G6,A10:M54").ClearContents
’結合されているエリア
Range("D5").MergeArea.ClearContents ’D5:D6が結合範囲なら、D6を指定してもよい
Range("F5").MergeArea.ClearContents
    • good
    • 0

無理に、「MergeArea」を入れなくてもいいような気がします。



Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").ClearContents

この回答への補足

ご回答ありがとうございます。

MergeAreaは当所入れていなかったのですが、結合のエラーがでたので、ネットで検索したところMergeAreaを入れるとよいとのことだったので入れたのですが、やはり結合のエラーがでてしまいます。

情報の不足があればご指摘下さい。

補足日時:2014/07/23 13:04
    • good
    • 0

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

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


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