こんにちは。お邪魔します。
> 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
のような記述であれば、食み出る位置に結合セルがあってもなくても、
(結合セルが原因の)エラーは起きません。
(右や下に食み出る位置にある結合セルについては、値を消去し、
上や左に食み出る位置にある結合セルについては、何もしない、
というような目的に使える記述です。)
もし、これでもエラーが出るとなると、部分的なセルのロックとシート保護、
とか、他の原因を考えることになるかと思いますので、
問題を切り分ける意味では、この記述も試してみてください。
(いずれも、試す時は、加筆・編集せず、そのままの記述でお願いします。)
以上です。
補足
ご回答ありがとうございます。 MergeAreaは当所入れていなかったのですが、結合のエラーがでたので、ネットで検索したところMergeAreaを入れるとよいとのことだったので入れたのですが、やはり結合のエラーがでてしまいます。 情報の不足があればご指摘下さい。