- 締切済み
VBAで結合したセルがクリアできない
コードは以下のように記述してあります。 Worksheets("Sheet2").Activate 'Sheet2のセルをクリア Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").MergeArea.ClearContentsb 別のシートの複数のセルをクリアしたいのですが、結合されたセルがクリアできないと エラーがでます。 結合セルはD5:D6とF5:F6です。 何が間違っているのでしょうか? Excel2013です。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。お邪魔します。 > 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 のような記述であれば、食み出る位置に結合セルがあってもなくても、 (結合セルが原因の)エラーは起きません。 (右や下に食み出る位置にある結合セルについては、値を消去し、 上や左に食み出る位置にある結合セルについては、何もしない、 というような目的に使える記述です。) もし、これでもエラーが出るとなると、部分的なセルのロックとシート保護、 とか、他の原因を考えることになるかと思いますので、 問題を切り分ける意味では、この記述も試してみてください。 (いずれも、試す時は、加筆・編集せず、そのままの記述でお願いします。) 以上です。
- kybo
- ベストアンサー率53% (349/647)
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
- kybo
- ベストアンサー率53% (349/647)
無理に、「MergeArea」を入れなくてもいいような気がします。 Range("B5,B6,D5:D6,F5:F6,G5,G6,A10:M54").ClearContents
補足
ご回答ありがとうございます。 MergeAreaは当所入れていなかったのですが、結合のエラーがでたので、ネットで検索したところMergeAreaを入れるとよいとのことだったので入れたのですが、やはり結合のエラーがでてしまいます。 情報の不足があればご指摘下さい。