2017-08-10 15 views
0

特定のプロパティ(特定の色など)を持つセルがすべて空でないかどうかを確認したい。マージされたセルを含むセルの範囲をループする

問題は、その範囲内で、いくつかの結合されたセルがあるということです、そして、それらが(だから、私はちょうどそれらを検出することはできませんし、体系的にそれらを回避)の寸法が異なります。

範囲([一部の範囲])内の各セルに対して のようなものがあります

マージされたセルのために私に一つだけのセルを与えること?

私はそれを試してみましたが、これは私に標準セルを与えました。つまり、結合されたセルは複数回カウントされます。そして、セルの内容は左上隅のセルにのみ割り当てられます(つまり、結合されたセルの空のセルを検出します)。

私はオフセット関数についても考えましたが、ここで黒いセルはマージされたセルです): Black cells are merged

+0

これまでに何を試しましたか?コードで何をすると思いますか?範囲内のセルがマージされているかどうかをチェックするだけですか? – BruceWayne

+0

https://stackoverflow.com/questions/22075988/detect-merged-cells-in-vba-excel-with-mergeareaを参照してください。 –

答えて

1

以下の機能を使用できます。私は基本的に何が起こっているかを説明するためにそれをコメントしますが、している:

  • ループを与えられた範囲
  • チェック内のすべてのセルを介して細胞がそのMergeAreaの最初のセルである場合。 MergeAreaは、マージされていないセルだけであることに注意してください。
  • 空欄を確認してください。
  • セル/ MergeAreaのアドレスを空にすると、デバッグステートメントを表示します。

コード:

Function EmptyTest(rng As Range) As Boolean 
    EmptyTest = False ' Set to true if any cell in rng is empty 
    Dim cell As Range 
    For Each cell In rng 
     ' Add your custom check here, e.g. for cell colour is black test do 
     ' If cell.Interior.Color = RGB(0,0,0) Then 

     ' Check it is the first cell in MergeArea 
     If cell.Address = cell.MergeArea.Cells(1).Address Then 
      ' Check if it's empty 
      If Len(cell.MergeArea.Cells(1).Value) = 0 Then 
       EmptyTest = True 
       ' Have the immediate window open to see debug statements 
       Debug.Print "Range: " & cell.MergeArea.Address & " is empty." 
      End If 
     End If 

     ' "End If" here if you added a custom check like the interior colour demo above. 
    Next cell 
End Function 

例:VBAエディタでsheet

は、呼び出し

イミディエイトウィンドウ*で

出力:

Range: $A$1:$B$4 is empty. 
Range: $C$3 is empty. 
Range: $G$4 is empty. 

また、この関数は、セルのいずれかが空であるかどうかに応じてTrueまたはFalseを返します。


*即時ウィンドウ

はCtrl + Gを押して、VBAエディタで開くことができます。

関連する問題