「この操作は結合したセルには行えません。」

中級VBA

はじめに

 このエラーは結合セルに対して値をコピーしたり、ClearContents (数式と値をクリア) しようとした時などに発生します。
 結合セルが含まれる範囲にコピーやClearContents を行うためには注意しなければならない点がいくつかあります。 エラーとなる事例と対処方法について紹介します。

エラーが発生する事例

 例えば、“B2:C2” が結合されている場合結合領域すべてを指定していればエラーは起こりませんが、一部分のみをクリアしようとすると「この操作は結合したセルには行えません。」とエラーが発生します。
 

    Range("B2:C2").ClearContents    '○
    Range("B2").ClearContents      'エラー
    Range("C2").ClearContents      'エラー

 また、同じく“B2:C2” が結合されている場合、コピーでは、コピー元のセルが結合セルの左上であれば上手くいきますが、コピー先が結合セルの場合はエラーとなります。
 尚、結合セルの左上でないセルをコピー元に指定すると値が無いので空白がコピーされる事になります。(2番目の例)

Range("B2").Copy Range("A2")     '○
Range("C2").Copy Range("A2")     '結合されたC2には値が無い
Range("A2").Copy Range("B2")     'エラー

 複数セルのコピーでは、コピー元に結合セルを指定した場合は、エラーとなりませんが、コピー先に結合セルが含まれているとエラーとなります。

    Range("B1:B10").Copy Range("A1:A10")     '○
    Range("A1:A10").Copy Range("B1:B10")     'エラー

対処方法

 上記の例からもわかるように、ClearContents ではすべの範囲を指定しなければなりません。
 また、結合セルは左上のセルに値を持っており、コピー元で指定した場合は成功しますが、コピー先に指定するとエラーになります。
 以下のようなセルの配置で例をあげます。

結合セルは左上の値

 結合セルは左上のセルが代表して値を格納しています。上記のように ClearContents ではエラーとなりましたが、文字数なしの空白で値を消去するのであれば、左上のセルを空白にする事は可能です。

Range("B2") = ""    ' B2:C2 の結合セルは空白になります。

 連続して結合セルの値をクリアするには、左上のセルに対して空白を入力していけば良いでしょう。
 3行目の結合セルは、C列なので空白にはなりません。

Sub testClear1()
    Dim i As Long
    For i = 1 To 10
        Cells(i, "B") = ""
    Next i
End Sub

 コピー(値の代入)も同様にできます。A列の値をB列にコピーします。

Sub testCopy()
    Dim i As Long
    For i = 1 To 10
        Cells(i, "B") = Cells(i, "A")
    Next i
End Sub

 A列は空白なので、結果は上の絵と同じになります。

MergeArea を使う

 以下のように MergeArea.ClearContents を利用する方法もあります。
 この方法ですと、結合セルの左上セルでなくてもクリアする事ができます。
 (古いバージョンのExcelVBAでは利用できない場合があるようです。)

Sub errorTest2()
    Dim i As Long
    For i = 2 To 5
        Cells(i, "C").MergeArea.ClearContents
    Next i
End Sub

まとめ

 結合セルは、データ処理する場合に扱いずらい事があります。
 単純な巡回処理でも途中に結合セルがあるとエラーで弾かれたりします。
 
 結合セルの値を取得したい場合は、左上のセルを使います。また削除も空白をセットすれば問題なく使えます。
 また、MergeArea.ClearContents を使えば複雑な結合セルにも対応できるようになります。

タイトルとURLをコピーしました