2016-08-25 10 views
1

セルが空かヌルか、メッセージと終了サブが表示されるかどうかを確認しようとしています。ここに私のコードです:IFヌル終了サブコード

With Worksheets(1).[D3:D4, D6:D14] 
    If WorksheetFunction.CountA(.Cells) = 0 Then 
     MsgBox "Nothing to generate" & vbNewLine & _ 
     "Set parameters and click generate." 
     Exit Sub 
    End If 
End With 

しかし、全体[D3:D4, D6:D14]が空の場合は、コードにのみ機能します。セルのうちの1つだけが空であってもサブを終了したい。すべてのセルにはサブを続けるためのコンテンツが必要です。助けてください。あなたが範囲内Wiki検索する必要が

+0

試してみます以下のコード –

+2

は '.CountBlank(' .C ountA( ' – Slai

答えて

1

をまたSpecialCellsを使用することができます。

Sub Check() 
Dim rng1 As Range 
On Error Resume Next 

With Worksheets(1).[D3:D4, D6:D14] 
Set rng1 = .SpecialCells(xlBlanks) 
    If Not rng1 Is Nothing Then 
     MsgBox "Nothing to generate" & vbNewLine & _ 
     "Set parameters and click generate." 
     Exit Sub 
    End If 
End With 

End Sub 

フォローアップの質問

Sub Check2() 
Dim rng1 As Range 
Dim rng2 As Range 

With Worksheets(1) 
Set rng1 = .Range(.[D3:D4], .[D6:D14]) 
End With 

On Error Resume Next 
Set rng2 = rng1.SpecialCells(xlBlanks) 
On Error GoTo 0 

If Not rng1 Is Nothing Then 
    MsgBox rng1.Cells.Count - rng2.Cells.Count & " were used" 
Else 
    MsgBox "all cells used" 
End If 

End Sub 
+0

これは素晴らしい動作です。ありがとう! D3:D4、D6:D14]が 'Nothing'であれば現在のメッセージが表示されますが、1つのセルで全てが内容を持っていなければ、パラメータを完成させるために別のメッセージを表示します。どうやってするか? – Marco

+0

@marcoあなたのフォローアップの更新された回答を参照してください。 – brettdj

1

は、以下のコードを試してみてください。

Sub CheckEmptyCellsinRange() 

Dim Rng  As Range 
Dim cell As Range 

Set Rng = Worksheets(1).[D3:D4, D6:D14] 

For Each cell In Rng 
    If IsEmpty(cell) Or IsNull(cell) Then 
     MsgBox "Nothing to generate" & vbNewLine & _ 
     "Set parameters and click generate." 
     Exit Sub   
    End If 

Next cell 

End Sub 
+0

セルによるルーピングセルは、大規模な場合には高価な時間を要することがあります。 – brettdj

+0

あなたは正しいですが、彼の例では10セル未満の範囲を持っています –

関連する問題