Вернуть ноль в Excel - PullRequest
       13

Вернуть ноль в Excel

0 голосов
/ 13 ноября 2018

В настоящее время я пытаюсь написать формулу, которая в среднем объединяет 4 значения, которые могут или не могут быть заполнены.Формула ищет строку для значения в каждой ячейке, а затем усредняет эти значения вместе.

Проблема в том, что если значение не найдено, мне нужно, чтобы оно вернуло null, потому что, если я возвращаю 0, оно не усредняется должным образом, и пустое значение "" возвращаетОшибка #VALUE, даже если она включена в функцию VALUE() и использует функцию AVERAGEA().

Я также попытался написать очень простой макрос, который просто возвращает ноль, но из того, что я понимаю, Excel не нравится.

Так есть какой-то способ вернуть ноль, который я пропустил?Я знаю, что в GoogleSheets формула =IFERROR(1/0) справилась бы - есть ли подобный обходной путь?

Я искренне ожидаю, что мне придется изменить формулу, чтобы все были в VBA, но я хотелчтобы увидеть, что я здесь что-то упустил.

Заранее спасибо!

Редактировать: Итак, код, который я использую, выглядит следующим образом (я немного его сократил, чтобы сделать егопроще):

=AVERAGE(IFERROR(VALUE(MID($AF2, FIND("Hit:", $AF2) + 4, 3)), ""), IFERROR(VALUE(MID($AH2, FIND("Hit:", $AH2) + 4, 3)), ""))

В ячейках AF2 и AH2 длинные строки, и номер, который я ищу, всегда сразу после того, как он говорит «Hit:» (если номер есть).Так что с AVERAGEIF () я не уверен, как ввести аргумент диапазона там

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Единственное решение, которое я могу придумать, - это использовать функцию AVERAGE () в качестве массива. "" Обрабатывается как строка в обычных функциях AVERAGE () или SUM (), но рассматривается как нулевое значение в массивах.

Попробуйте это (как массив, Ctrl + Shift + Enter):

{IFERROR(VALUE(MID($AF2:$AH2, FIND("Hit:", $AF2:$AH2) + 4, 3)), "")}
0 голосов
/ 15 ноября 2018

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

'''Searches for a string in each cell in the range, then pulls the value
'''averages together all values that were found offset number of characters away from the string
Function averageWithErrors(searchFor As String, rng As range, offset As Integer, extractLength As Integer) As Double

'Declare Variables
Dim characterPosition As Integer
Dim num As Double
Dim count As Integer
Dim cellCheck As range
Dim cellTotals As Integer


'Set Variables
count = 0
num = 0

'Check each cell
For Each cellCheck In rng
    If InStr(cellCheck.Value, searchFor) Then           'Check if cell has the string
        characterPosition = InStr(cellCheck.Value, searchFor)
        num = num + Val(Mid(cellCheck.Value, characterPosition + offset, extractLength))    'Add the value to the running total
        count = count + 1
    End If
Next cellCheck

averageWithErrors = num / count 'return the average of the values found

End Function
0 голосов
/ 13 ноября 2018

Вы можете использовать iferror (), чтобы вернуть любое желаемое значение:

=iferror(your_function,"")

или

=iferror(your_function,"Check")

четные числа ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...