Тестирование пустых ячеек в 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 также будет значение и т. Д.

Моя формула находится в столбце 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 т. Д.

Для нуля вы можете просто проверить, есть ли 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) 
Interesting Posts

Excel выделяет дубликаты и фильтр по цветной альтернативе

Экспорт данных Matlab в Excel, 2003-2010

Проблема Python с чтением и вычислением данных из файла excel

Вперед Свернуть в строке Excel с помощью Apache POI

Настройка корреляции на основе диапазона эталонной ячейки даты

Навигация в Excel VBA HTML (без идентификатора или класса)

Получите значение Excel как значение строки, но значение POI Apache в качестве значения Boolean Value

Python | Запись цикла в файл creat для каждого листа в файле excel

как я могу увеличить размер шрифта каждой ячейки на всей странице excel эффективно?

c # читать свойство шрифта excel cell, когда ячейка содержит смешанный полужирный и обычный текст, используя Interop

Выпадающий список триггера в зависимости от формулы?

Не удается получить ключ продукта Windows с помощью VBA – Ошибка автоматизации

Извлечение части строки в Excel

макрос, основанный на изменении ячейки

Ошибка VBA в формуле Excel

Давайте будем гением компьютера.