Тестирование пустых ячеек в excel vba
Я создаю формулу в Excel VBA формы
myformula(cell1, cell2, range)
где диапазон выглядит примерно так же, как первые 7 столбцов:
V1 D2 V2 D3 V3 D4 V4 RESULT 0.5 2 0.7
В первом столбце всегда будет значение, которое будет иметь значение от 0 до 1 включительно. Все последующие столбцы могут быть пустыми, но если в D2 есть значение, в V2 также будет значение и т. Д.
- Прокрутите круг и найдите пустые ячейки
- Если значение ячейки изменилось, тогда запустите разные операторы If
- Access-VBA проверяет, нет ли ячейки в открытой рабочей книге excel перед копированием строки
- удалять синие и пустые ячейки из xlsx с помощью vbscript
- где - ошибка во втором выражении IF
Моя формула находится в столбце RESULT и включает суммирование цифр в столбцах V, но только если заполнен предыдущий столбец D. т.е. в этом случае он будет вычислять V1 + V2, но игнорировать V3 и V4.
VB Я использую работы с
if IsEmpty(D2)
для выбора соответствующих значений, и это работает в большинстве случаев.
Однако я также хочу применить эту формулу к случаям, когда значения V и D вычисляются по формуле. Формула условна, выдает либо число, либо «" (что-то вроде IF(A2="","",3)
) Таким образом, диапазон ячеек выглядит идентичным, но VB не считается по-настоящему пустым.
Я ищу способы обойти это. Я понимаю, что результат формулы никогда не будет по-настоящему пустым, но есть ли способ сделать содержимое ячейки «достаточно пустым», чтобы VB понимал ее как пустую? В качестве альтернативы существует другое условие, которое я могу использовать для сбора пустых ячеек, но я должен иметь возможность различать нулевые значения и пустые ячейки.
ETA: Я изо всех сил пытаюсь реализовать решение Stepan1010. Это то, что я делаю – это может быть неправильно:
Public Function YEARAV(sdate As Date, edate As Date, yearrange As Range) As Variant Dim v1 As Variant Dim v2 As Variant Dim v3 As Variant Dim v4 As Variant Dim b As Date Dim c As Date Dim d As Date v1 = yearrange.Cells(1, 1) v2 = yearrange.Cells(1, 3) v3 = yearrange.Cells(1, 5) v4 = yearrange.Cells(1, 7) b = yearrange.Cells(1, 2) c = yearrange.Cells(1, 4) d = yearrange.Cells(1, 6) total_days = edate - sdate a = sdate e = edate If Range(yearrange.Cells(1, 6)).Value = vbNullString Then d = edate If Range(yearrange.Cells(1, 4)).Value = vbNullString Then c = edate If Range(yearrange.Cells(1, 2)).Value = vbNullString Then b = edate End If End If End If YEARAV = ((b - a) * v1 + (c - b) * v2 + (d - c) * v3 + (e - d) * v4) / total_days End Function
Я также попробовал просто использовать If b = vbNullString
т. Д.
- Если Not Isempty возвращает значение «», но продолжает следующее утверждение
- Распечатка рабочего листа, когда ячейка не заполнена
- Можно ли использовать IsEmpty для ссылки на другой лист и скрыть столбец?
- Как проверить, пуста ли ячейка даты в Excel?
- Удалить пустые строки, отличные от первого столбца
- Ячейки Excel из экспорта Access выглядят пустыми, но не являются (= isblank = FALSE)
- Excel Sum, если не Null String
Для нуля вы можете просто проверить, есть ли Range("D2").Value = 0
Чтобы проверить, возвращает ли формула пробел, вы можете использовать, если Range("D2").Value = vbNullString
Вы также можете нормально уйти с Range("D2").Value = ""
(хотя некоторые люди с недобросовестными vba, скорее всего, рекомендуют vbNullString)
Вы можете создать пользовательскую функцию. Используйте функцию ниже, и вы можете называть ее так:
Debug.Print IsCellFormulaEmpty(Range("D2"))
Вот функция:
Function IsCellFormulaEmpty(c As Range) As Boolean Dim myVal As String myVal = Trim(c.Value) Select Case myVal Case Empty IsCellFormulaEmpty = True Case Else IsCellFormulaEmpty = False End Select End Function
Я проверил это на постоянное значение 6
, формулу =IF(D24=C24,C23,"")
(которая вернула нулевую строку) и постоянное значение 0
. Результаты False, True, False
как ожидалось.
Вообще говоря, старайтесь избегать VBA, когда сможете. В этом случае, учитывая настройку данных, например:
Формула в ячейке H2 и скопированная вниз:
=A2+SUMPRODUCT(--(B2:F2<>""),--(ISNUMBER(SEARCH("d",$B$1:$F$1))),C2:G2)