Excelの範囲が空かどうかを確認したい。
VBAコードを記述する方法:
If Range("A38":"P38") is empty
私が得たコメントから解決策を見つけました。
Sub TestIsEmpty()
If WorksheetFunction.CountA(Range("A38:P38")) = 0 Then
MsgBox "Empty"
Else
MsgBox "Not Empty"
End If
End Sub
変数が初期化されていない場合、または明示的に空に設定されている場合、IsEmptyはTrueを返します。それ以外の場合は、Falseを返します。式に複数の変数が含まれる場合、常にFalseが返されます。 IsEmptyは、バリアントに対して意味のある情報のみを返します。 ( https://msdn.Microsoft.com/en-us/library/office/gg264227.aspx )。したがって、範囲内のすべてのセルを個別にチェックする必要があります。
Dim thisColumn as Byte, thisRow as Byte
For thisColumn = 1 To 5
For ThisRow = 1 To 6
If IsEmpty(Cells(thisRow, thisColumn)) = False Then
GoTo RangeIsNotEmpty
End If
Next thisRow
Next thisColumn
...........
RangeIsNotEmpty:
もちろん、空のセルをカウントしないCountA関数を使用したソリューションよりも多くのコードがありますが、GoToは、少なくとも1つの空でないセルが見つかった場合にループを中断し、特に範囲が大きく、このケースを検出する必要がある場合、コードを高速に実行できます。また、このコードは、VBA関数ではないExcel CountA関数を使用するよりも、コードが何をしているのかを理解しやすいです。
Dim M As Range
Set M = Selection
If application.CountIf(M, "<>0") < 2 Then
MsgBox "Nothing selected, please select first BOM or Next BOM"
Else
'Your code here
End If
私はあなたができることを学んだ経験から:
If Selection.Rows.Count < 2
Then End If`
少し後で説明を提供します(現在作業中です)
CountA
を使用する代わりに、範囲内の各セルをループすることが絶対に必要な状況にある場合、最初にその範囲を配列に変換し、その配列の値でループするよりもはるかに高速です多くの範囲/セルでループします。
関数IsRangeEmpty(ByVal rng As Range)Asブール
_'Converts a range to an array and returns true if a value is found in said array
Dim area As Range
For Each area In rng.Areas
If area.Cells.Count > 1 Then
'save range as array
Dim arr As Variant
arr = area.value
'loop through array
Dim cel As Variant
For Each cel In arr
'if cell is not empty then
If Len(Trim(cel)) > 0 Then
IsRangeEmpty = False
Exit Function
End If
Next cel
Else 'cannot loop on array with one value
'if cell is not empty then
If Len(Trim(area.Value2)) > 0 Then
IsRangeEmpty = False
Exit Function
End If
End If
Next area
IsRangeEmpty = True
_
終了機能
使用方法の例:
_Sub Test()
Debug.Print IsRangeEmpty(Range("A38:P38"))
End Sub
_
Range("A38:P38")
が空の場合、True
;を出力します。それ以外の場合は、False
を出力します。
_Dim cel As Range, hasNoData As Boolean
hasNoData = True
For Each cel In Selection
hasNoData = hasNoData And IsEmpty(cel)
Next
_
True
内のセルにデータが含まれていない場合、これはSelection
を返します。特定の範囲については、Selection
をRANGE(...)
に置き換えるだけです。
別の可能な解決策。空のセルを数え、セルの総数からその値を引きます
Sub Emptys()
Dim r As range
Dim totalCells As Integer
'My range To check'
Set r = ActiveSheet.range("A1:B5")
'Check for filled cells'
totalCells = r.Count- WorksheetFunction.CountBlank(r)
If totalCells = 0 Then
MsgBox "Range is empty"
Else
MsgBox "Range is not empty"
End If
End Sub
これは@TomM's
へのわずかな追加です。 answer /選択範囲のセルが空かどうかをチェックする簡単な関数
Public Function CheckIfSelectionIsEmpty() As Boolean
Dim emptySelection As Boolean:emptySelection=True
Dim cell As Range
For Each cell In Selection
emptySelection = emptySelection And isEmpty(cell)
If emptySelection = False Then
Exit For
End If
Next
CheckIfSelectionIsEmpty = emptySelection
End Function