Подтвердить что ты не робот

Имейте формулы Excel, которые возвращают 0, делают результат пустым

У повторяющейся проблемы Excel у меня есть такие формулы, как INDEX(array,row,column), которые возвращают 0, когда нет результата, вместо того, чтобы возвращать пустое.

Каков наилучший способ изменить нулевой результат на пустой?

Вот подходы, которые я пробовал до сих пор:

1) Используя деление на ноль. Если INDEX возвращает 0, я вызываю ошибку, которую затем отфильтровываю.

=IFERROR(1/1/INDEX(A,B,C),"")

CONS: делает формулу более грязной и скрывает ошибки, которые вы, возможно, захотите увидеть.

2) Использование пользовательского форматирования

0;-0;;@

CONS:
1) не может одновременно применять формат даты
2) Он не работает с условным форматированием, когда дело доходит до проверки пустых ячеек (все равно значение нуля, оно просто не показано)

3) Использование операторов IF

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"")

CONS: Мессиальное повторение

Есть ли у кого-нибудь другие/лучшие идеи?

4b9b3361

Ответ 1

Вы можете создавать свои собственные пользовательские функции в модуле в Excel, например (из памяти, поэтому может потребоваться некоторая отладка, а синтаксис может также варьироваться в версиях Excel):

Public Function ZeroToBlank (x As Integer) As String
    If x = 0 then
        ZeroToBlank = ""
    Else
        ZeroToBlank = CStr(x)
    End If
End Function

Затем вы можете просто вставить =ZeroToBlank (Index (a,b,c)) в свою ячейку.

Вот хороший учебник по этой теме здесь.

Основные шаги:

  • Откройте редактор VB в Excel с помощью Tools -> Macro -> Visual Basic Editor.
  • Создайте новый модуль с Insert -> Module.
  • Введите вышеуказанную функцию в этот модуль.
  • В ячейках, где вы хотите вызвать эту функцию, введите формулу & tbsp;   =ZeroToBlank (<<whatever>>)
    где <<whatever>> - это значение, которое вы хотите использовать пустым для if он равен нулю.
  • Обратите внимание, что эта функция возвращает строку, поэтому, если вы хотите, чтобы она выглядела как число, вы можете захотеть правильно обосновать ячейки.

Обратите внимание, что могут быть незначительные изменения в зависимости от того, какая версия Excel у вас есть. Моя версия Excel 2002, которая, по общему признанию, довольно старая, но она все еще делает все, что мне нужно.

Ответ 2

Нормальным способом будет оператор IF, хотя и более простой, чем ваш пример:

=IF(INDEX(a,b,c),INDEX(a,b,c),"")

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

Ответ 3

Я не уверен, что он работает со всеми типами данных, но единственным решением, которое я нашел на данный момент, является проверка, если индекс возвращает пустой:

=IF(ISBLANK(INDEX(a,b,c)),"",INDEX(a,b,c))

Формула

=IF(INDEX(a,b,c),INDEX(a,b,c),"")

не работает с текстом

Ответ 4

Возможно, самый простой способ - добавить условие форматирования текста к формуле с помощью модификатора ?. Таким образом:

(formula to grab values) становится:

text((formula to grab values),"?")

Надеюсь, что это поможет.

Ответ 5

Если вы хотите, чтобы все нули на листе исчезли, перейдите в раздел "Параметры Excel", "Дополнительно", "Показать параметры для этой рабочей таблицы" и снимите "Показывать нуль в ячейках с нулевым значением значение". (Это навигационная система для Excel 2007, YMMV.)

Что касается вашего ответа (2), вы можете сохранить пару нажатий клавиш, набрав 0;-0; - насколько я могу судить, что эквивалентно 0;-0;;@. И наоборот, если вы хотите быть немного более общим, вы можете использовать формат General;-General;. Нет, это автоматически не обрабатывает даты, но, как указывает Барри, если вы ожидаете значения даты, вы можете использовать формат, например d-mmm-yyyy;;.

Ответ 6

Вопрос может заключаться в том, почему вы хотите, чтобы он действовал иначе, чем он делает прямо сейчас? Помимо написания вашей собственной функции обертывания или альтернативной функции в VBA (которая, вероятно, приведет к уменьшению скорости преобразования в больших файлах), может быть не одно решение для ваших различных проблем.

Любая последующая формула, скорее всего, провалится через пробел, поэтому вы получите ошибку, которую вы бы захватили с помощью IFERROR() или предотвратить с помощью IF(sourcecell<>"";...), если вы будете использовать последнее, тогда тестирование на нуль будет равным количеству работы и беспорядка. Проверка для пустых ячеек становится проверкой на 0 ценные ячейки. (если эта работа работает для вас, объясните более конкретную проблему).

В эстетических целях пользовательское решение для форматирования будет просто прекрасным.

Для диаграмм может возникнуть проблема, которая будет решена путем применения ее в исходной формуле.

Ответ 7

Существует очень простой ответ на эту грязную проблему - функцию SUBSTITUTE. В приведенном выше примере:

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"")

Можно переписать следующим образом:

=SUBSTITUTE((1/1/INDEX(A,B,C), " ", "")

Ответ 8

Я понял это, объединив строку EMPTY.

INDEX(tt_Attributes,MATCH([RowID],tt_Attributes[RowID],0),COLUMN(tt_Attributes[Long Description]) ) & ""

Ответ 9

=if(b2 = "", "", b2)

Это сработало для меня

Ответ 10

Используйте условное форматирование (вкладка "Главная", раздел стилей) и применяйте правило ячеек ярлыков (помещая 0 в ячейки "Формат", которые равны квадрату), но выберите пользовательский формат, а затем вкладку "Число". Выберите "Пользовательский стиль" и в поле "Тип":

0; -0;; @

Звучит сложно, но на самом деле просто.

Это дает преимущество в том, что ячейка выглядит пустой, но 0 все еще является базовым значением, поэтому любые формулы, которые вы используете против этой ячейки/выделения, по-прежнему будут считать ее числовой и сохраняют много ошибок при использовании цепочечных операторов IF.

Ответ 11

Ничего из вышеперечисленного не работало для меня сегодня, поэтому я попытался поместить 0 в кавычки, как показано в примере ниже.

Пример: = IF (INDEX (a, b, c) = "0", "", INDEX (a, b, c))

Ответ 12

=IF(INDEX(a,b,c)="0","", INDEX(a,b,c)) работал у меня с незначительной модификацией. Исключение 0 и отсутствие пробелов между цитатами: =IF(INDEX(a,b,c)="","", INDEX(a,b,c))