2017-11-08 2 views
0

このコードは常にセルを返しますが空ではありません。どうしてこれなの?私の範囲は間違っていますか?このコードは別のシートのコマンドボタンにあります。私は行番号をforループで実行するつもりですが、このコードを処理する前に正しく動作させる必要があります。列の住所、番号、手紙がありますのでご注意ください。isemptyおよび範囲内の変数

すべてのヘルプappreciated-おかげ ジェリー

columnletterstart = "A" 
columnletterend = "D" 

Let therange = columnletterstart & "20" & ":" & columnletterend & "20" 
Cells(6, 6) = therange 
If IsEmpty(Worksheets("Vacation Schedule").Range(therange)) = False Then 
    'Cell A2 is not blank 
    MsgBox "Cell is not empty" 
Else 
    'Cell A2 is blank 
    MsgBox "Cell is empty" 
End If 
+0

範囲の数式 'A20があります。これは次のように

Function CheckRange(passedRange As range) As Boolean Dim cell As range Dim rangeCounter As Integer rangeCounter = 0 For Each cell In passedRange If cell.Value <> "" Then rangeCounter = rangeCounter + 1 Exit For End If Next cell If rangeCounter = 0 Then CheckRange = True Else CheckRange = False End If End Function 

はそれを呼び出します'? –

+0

私はあなたが各セルをループする必要があると思います。あるいは、何をしようとしているかに応じて、COUNTBLANKまたはCOUNTAというワークシート関数を使用することもできます。 – SJR

+0

*** UNCLEAR *** ........範囲内のすべてのセルが空であるかどうか、または範囲内のセルのANYが空であるかどうかを確認しようとしていますか? –

答えて

2

あなたは多細胞範囲IsEmptyを渡している:空ではないそれは2D Variant配列として解釈(A20 D20)を、空のバリアントの初期化された配列であるためです。 IsEmptyは、数式を含まない単一セル範囲で動作します。

のisEmpty、単一細胞の例:

If IsEmpty(Worksheets("Example").Cells(1, 1).Value2) Then ... 

に@SJRで述べたように、複数のセルをカバーする範囲の虚しさをチェックするために、あなたはCOUNTAを見てみたい:

If Application.WorksheetFunction.CountA(Worksheets("Vacation Schedule").Range(therange)) > 0 Then 

編集

繰り返し問題は、ゼロレン文字列が空であるとして; Application.WorksheetFunction.CountAは、それらが定数(例えば、')または""をもたらす式を含むかどうかにかかわらず、そのような細胞を計数する。範囲の空虚を考慮する際

次の関数は、必要に応じて長さゼロの文字列をスキップ:

Public Function IsRangeEmpty(ByVal prngTest As Excel.Range, pbZeroLengthStringIsEmpty As Boolean) As Boolean 
    IsRangeEmpty = prngTest.Find("*", LookIn:=IIf(pbZeroLengthStringIsEmpty, xlValues, xlFormulas), LookAt:=xlPart, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False) Is Nothing 
End Function 
0

私は今週、同じ問題のようなものを持っていた正直に言うと。

IsEmptyと​​は、私は私自身の方法を書いてしまった正しい結果を返しませんでしたので:D20:

Dim columnletterstart As String 
Dim columnletterend As String 
Dim concatenateString As String 

Dim testRange As range 

columnletterstart = "A" 
columnletterend = "D" 
concatenateString = columnletterstart & "20" & ":" & columnletterend & "20" 

Set testRange = range(concatenateString) 

If CheckRange(testRange) Then 
    MsgBox "empty" 
Else 
    MsgBox "not empty" 
End If 
+0

値をヒットするとすぐにループを終了する必要があります。範囲が巨大で、最初のセルが "空"ではないと想像してください - コードは何もない範囲全体をスキャンし続けます。代わりに私の答えでは、IsRangeEmpty関数を参照してください。 – Excelosaurus

+0

'Exit For'で追加したばかりの' CheckRange = False'を置き換えてください。 – Excelosaurus

+0

私はそれを交換しました。関数を終了するのではなく、ループを終了する方が良い理由を説明しますか? –

関連する問題