2017-10-23 3 views
1

次のコードを使用してセルをマージ解除してコピーします。これは私が使用しているコードです。Excel vbaで「No Cells Found Error」と表示される

Sub unMerge() 
    Dim lastRow As Long 
    Dim lastCol As Long 
    lastRow = Range("B2").End(xlDown).Row 
    lastCol = Range("A2").End(xlToRight).Column 

    For iCol = 1 To lastCol 

     Columns(iCol).unMerge 
     Columns(iCol).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c" 

    Next iCol 
End Sub 

コードが列内のマージされたセルがあるときしかし列がマージされた細胞なしに遭遇したとき、それはキャプション付きのエラーを与えるスムーズに動作します。 コードの不具合は何でしょうか。

+4

よく融合する前にマージされたセルがあるかどうかチェックする必要があります – jetblack

+0

If-Statementを試して、セルがマージされている場合はコードを実行できますか? – EliasWick

答えて

2

空白のセルが見つからない場合、SpecialCellsメソッドはエラーになります。これを避けるために、あなたは

そのエラーをスキップするように処理する簡単なエラーを使用することができ
On Error Resume Next 
Columns(iCol).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c" 
+0

あなたのソリューションは正常に動作しましたが、これは上記のエラーだけでなくすべてのエラーで機能します。特定のオプションがありますか? – KhawarAmeerMalik

+0

これは大きな問題ではありません。 specialcells行の直後にOn Error GoTo 0を使用すると、エラーをリセットできます。 – sktneer

+0

答えを捨てたその紳士は誰ですか?多分、彼はここに追加する方が良いでしょう。彼がコメントにそれを投稿したのであれば本当にそうだったでしょう。 :) – sktneer

1

他のすべてがスムーズに実行した場合、これはそれを修正するための良い方法です:

Sub unMerge() 
    Dim lastRow As Long 
    Dim lastCol As Long 
    Dim iCol As Long 

    lastRow = Range("B2").End(xlDown).Row 
    lastCol = Range("A2").End(xlToRight).Column 

    For iCol = 1 To lastCol 
     If Columns(iCol).MergeCells Then Columns(iCol).unMerge 
     If RangeContainsCellTypeBlanks(Columns(iCol)) Then 
      Columns(iCol).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c" 
     End If 
    Next iCol 

End Sub 

Public Function RangeContainsCellTypeBlanks(rng As Range) As Boolean 

    On Error GoTo RangeContainsCellTypeBlanks_Error  
    If rng.Cells.SpecialCells(xlCellTypeBlanks).Count > 0 Then RangeContainsCellTypeBlanks = True 

    On Error GoTo 0 
    Exit Function  

RangeContainsCellTypeBlanks_Error:  
    RangeContainsCellTypeBlanks = False  
End Function 

それがマージされた細胞のためにとかどうかを確認しますUnMergeを実行してFormulaR1C1を書き込みます。ここでMergeCellsプロパティは、Microsoftのドキュメントです:https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-mergecells-property-excel

SpecialCellsTypeBlanksに関しては、私は本当にファンではないが、明らかにそれを中心に簡単に行くことができないので、1がOn Error Resume Nextを使用する必要がある既知の制限がありこのエラーの捕捉の - https://www.rondebruin.nl/win/s4/win003.htm

少なくとも私はブール関数でそれを使用して、残りのコードを汚染しないことを確認しています。

+1

私の答えで述べたように、MergeとUnMergeはここでは問題にならず、むしろ、SpecialCells(xlCellTypeBlanks)がここで問題となるはずです。空のセルが見つからなければ、セルがマージされているかどうかに関わらず、エラーが発生します。 – sktneer

+1

@sktneer - うん、それは本当だ:) – Vityata

関連する問題