2016-06-17 3 views
0

特定の範囲が空であるかどうかチェックしたいと思います。したがって、私は次のコードを書いた小数点の値がいくつかの範囲で入力されていることを確認してください

Sub end_calculation1() 

    If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then 
     MsgBox "Please fill in all the answers in range D22:D27" 
    End If 

End Sub 

これは動作しますが、実際には2つの範囲を確認したいと思います。したがって、D22:D27だけでなく、D29:D30もそうです。

どのように私はこれを動作させることができますか?

+0

2番目の「IF」文を2番目の範囲に追加することを検討しましたか?それはそのまま動作しているからですか? – Dave

+0

WorksheetFunction.counta(範囲( "d2:d27")、範囲( "d29:d30")) –

答えて

1

あなたがチェックしたい、あまりにも多くの範囲がない場合は、よりIFのステートメントを追加することができます。

Public Sub end_calculation1() 
    If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then 
     MsgBox "Please fill in all the answers in range D22:D27" 
    ElseIf WorksheetFunction.CountA(Range("E22:E27")) < 6 Then 
     MsgBox "Please fill in all the answers in range E22:E27" 
    End If 
End Sub 

複数の範囲について、あなたは範囲をループするために手順を使用してチェックする機能を呼び出すことができます各範囲:あなたは、単一の行のすべての範囲を確認することができ、コメント
に応じて

Public Sub end_calculation_update() 
    Dim rngs As Variant, i As Byte 

    rngs = Array("D22:D27", "E22:E27", "F22:F27") 
    For i = 0 To UBound(rngs) 
     If (emptyRange(CStr(rngs(i)))) Then 
      MsgBox "Please fill in all the answers in range " & rngs(i) 
      Exit Sub 
     End If 
    Next i 

End Sub 
Private Function emptyRange(rngAddress As String) As Boolean 
    emptyRange = WorksheetFunction.CountA(Range(rngAddress)) < 6 
End Function 

UPDATE:

Public Sub end_calculation_revised() 
    Dim rng As Range 
    Set rng = Range("D22:D27,D29:E30") 

    If (WorksheetFunction.CountA(rng) < rng.Cells.Count) Then 
     MsgBox "Please fill in all the answers in range " & rng.Address 
    End If 
End Sub 
+1

2番目の範囲が2セルのため、固定の6ではなく

+0

良い点@nathan_sav。このアイデアを使用するように更新されました。 – lonestorm

1

セルD28は常に満杯ですか、または常に空ですか。

If WorksheetFunction.CountA(Range("D22:D30")) < 9 Then 
    MsgBox "Please fill in all the answers in range D22:D27 and D:28:D30" 
End If 

あなたが検出でセルD28を含めたくない場合は、単に最初の1の後に別のIfステートメントを持っています。

Sub end_calculation1() 

     If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then 
      MsgBox "Please fill in all the answers in range D22:D27" 
      Exit Sub 
     End If 

     If WorksheetFunction.CountA(Range("D28:D30")) < 6 Then 
      MsgBox "Please fill in all the answers in range D28:D30" 
     End If 
    End Sub 

Exit Subを使用すると、2つのエラーメッセージが表示されます。

ステージをさらに進めたい場合は、エラーメッセージを文字列に追加し、If文の最後に文字列が空であるかどうかを検出する「エラー文字列」を維持できます。この方法で、すべてのエラーを一度にトラップし、完了していないセルのリストをユーザーに提示することができます。

関連する問題