Как проверить, является ли диапазон пустым?

#excel #vba

#excel #vba

Вопрос:

Я выполняю упражнение в колледже, и мне нужно проверить, являются ли некоторые конкретные ячейки пустыми. Если они пустые, мне нужно что-то написать в них. Я пытался создать одну программу, но она не работала, показывая мне ошибку: 13.

Вот мой код:

 Option Explicit

Sub Test()

If Range("a1:e1").Value = "" Then
   Range("a1:e1") = "x"
End If

End Sub
  

Спасибо за помощь!

Ответ №1:

Если диапазон содержит 1 ячейку, то его .Value свойство возвращает одно скалярное значение. Однако, если диапазон содержит несколько ячеек, его .Value свойство возвращает массив. Вы можете перебрать все ячейки в диапазоне, чтобы увидеть, все ли они пусты. В качестве альтернативы, вы могли бы использовать WorksheetFunction.CountBlank , чтобы увидеть, соответствует ли количество пробелов в диапазоне количеству ячеек в диапазоне.

 With Range("a1:e1")
    If WorksheetFunction.CountBlank(.Cells) = .Cells.Count Then
       Range("a1:e1") = "x"
    End If
End With
  

Ответ №2:

Неясно, что вы хотите сделать, если одна ячейка в этом диапазоне не пуста.

Поскольку случай, когда вы хотите заполнить ячейки, если все они пустые, уже был рассмотрен, я рассмотрю случай, когда вы хотите проверить, есть ли в диапазоне пустые ячейки, и если да, то заполните их.

 Dim cell As Range
For Each cell In Range("A1:E1").Cells
    If cell.Value = "" Then
        cell.Value = "x"
    End If
Next cell
  

Ответ №3:

Вы также можете использовать WorksheetFunction.CountA . Он подсчитывает непустые ячейки. Вот так:

 If WorksheetFunction.CountA(Range("a1:e1")) = 0 Then
   Range("a1:e1") = "x"
End If
  

Он делает то же самое, что и код Жестянщика. Но проверка отличается.

Ответ №4:

Вы могли бы попробовать этот код:

 Sub Test()
    Dim rng As Range
    Set rng = Range("A1:E1")
    ' if we come upon non-empty cell we exit sub and do nothing
    For Each cell In rng
        If Not IsEmpty(cell) Then Exit Sub
    Next
    ' if we reached this, all cells are empty
    rng.Value = "x"
End Sub