EXCEL 結合セルのClearContentsのエラーの回避方法

#大事なことはいつもネットの片隅に書いてある
##ポイントはMergeArea
http://excel-ubara.com/excelvba1/EXCELVBA385.html
>注意．
***A1:B1セル範囲が結合されている場合、***
***Range("A1").ClearContents***
***これは、エラーとなります***ので、この場合は、
Range("A1").MergeArea.ClearContents
とする必要があります。

>実務としては、
Range("A1").Value = ""
この方が簡単でしょう。
ただし、指定のセルが結合範囲の先頭セルである必要があります。

#VBAで解決するには
 VBAでも後者はめんどくさいので、きっちりクリアする方法で行きます。
というのも「指定のセルが結合範囲の先頭セルである必要」というのはMergeAreaには関係がないからです。
　また実験用テーブルを実際にクリアするとわかりますが、MergeAreaは実際に結合していなくてもClearContentsが実行されます。(これはExcel2013以降だからかもしれません)

###コードの概要
MakeTableで作った表を、マクロでクリアします。
clearcontentsVBA(混在していてもすべて結合セルとしてクリアする方法)とclearcontentsVBA2(結合と非結合セルをエラーで分けて処理する方法)は同じ結果になりますが、Excel2010以前の場合はclearcontentsVBA2の方が確実かもしれません。(on errorで処理しているため)

##コード
### テーブル作成

```vb.net
Sub MakeTable()
'実験用の結合セルが混在した簡易な表を作ります
Range("A1:D4").Select: Selection.Clear
Range("A1").Select: ActiveCell.FormulaR1C1 = "1"
Range("B1:C1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.ReadingOrder = xlContext
.MergeCells = True
End With
ActiveCell.FormulaR1C1 = "2"
Range("A2:B2").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.MergeCells = True
End With
ActiveCell.FormulaR1C1 = "1"
Range("C2").Select: ActiveCell.FormulaR1C1 = "3"
Range("D1").Select: ActiveCell.FormulaR1C1 = "4"
Range("D2").Select: ActiveCell.FormulaR1C1 = "5"
Range("A3:A4").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.MergeCells = True
End With
ActiveCell.FormulaR1C1 = "3":
Range("A3:A4").Select: ActiveCell.FormulaR1C1 = "6"
Range("B3").Select: ActiveCell.FormulaR1C1 = "1"
Range("C3").Select: ActiveCell.FormulaR1C1 = "2"
Range("D3").Select: ActiveCell.FormulaR1C1 = "3"
Range("B4").Select: ActiveCell.FormulaR1C1 = "2"
Range("D4").Select: ActiveCell.FormulaR1C1 = "1"
Range("C4").Select: ActiveCell.FormulaR1C1 = "3"
End Sub
```
###混在していてもすべて結合セルとしてクリアする方法
ハイパーアクセラレーションブースト（ウソ）つき
なお、どちらも結合状態は解除していない。

```vb.net:clearcontentsVBA
Sub ClearcontentsVBA()
'こちらが混在していてもすべて結合セルとしてクリアする方法
'Starting Hyper-Accellalation :) Boost! ;]
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = ActiveSheet
Dim irow As Long, icol As Long, i As Long, LastRow As Long, LastCol As Long
LastRow = ws.UsedRange.Rows.Count 'ws.Range("A" & Rows.Count).End(xlUp).Rowは縦に結合していると正しくない
LastCol = ws.UsedRange.Columns.Count
For irow = 1 To LastRow
For icol = 1 To LastCol
ws.Range(ws.Cells(irow, icol).Address).MergeArea.ClearContents
Next
Next
'ハイパーアクセラレーション・ブースト(ウソ)終わり
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
```
###結合と非結合セルをエラーで分けて処理する方法

```vb.net:ClearContentsVBA2
Sub ClearContentsVBA2()
'結合と非結合セルをエラーで分けて処理する方法
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = ActiveSheet
Dim irow As Long, icol As Long, i As Long, LastRow As Long, LastCol As Long
LastRow = ws.UsedRange.Rows.Count 'ws.Range("A" & Rows.Count).End(xlUp).Rowは縦に結合していると正しくない
LastCol = ws.UsedRange.Columns.Count
On Error Resume Next 'On Errorでバグを判定させる(この手法はあまり推奨されない手法だがMergecellでも同じなのとexcel 2010以前は実験できないのでこちらを使用する)
For irow = 1 To LastRow
For icol = 1 To LastCol
ws.Cells(irow, icol).ClearContents
If Err.Number <> 0 Then
ws.Range(ws.Cells(irow, icol).Address).MergeArea.ClearContents
Err.Clear
End If
Next
Next
End Sub
```