COUNTA не работает, как я ожидаю в новых Google Таблицах

Я использую команду =COUNTA(I31:I) для подсчета всех непустых ячеек в столбце. Ячейки в столбце содержат эту строку кода:

=IF(ISNUMBER(D31), "X", "")

В результате ячейки являются пустой строкой (строка с добавлением ничего "") или содержит X.

Теперь проблема заключается в том, что COUNTA подсчитывает все ячейки после этой процедуры, пустые или нет. Если я удалю длинную командную строку, ячейка не засчитывается, и она работает нормально. Таким образом, эта длинная командная строка добавляет что-то в ячейку, поэтому она выглядит не пустой, даже если она выглядит пустой.

Любые подсказки тому, что это? Я предполагаю, что я должен использовать какой-то оператор Null вместо "", чтобы ничего не добавлять в ячейку.

Примечание. По некоторым причинам это работает в предыдущей версии таблицы Google, которую я имел.

В качестве потенциального обходного пути я мог бы заменить =COUNTA(I31:I), проверив специально для X с помощью =COUNTIF(I31:I;"X"). Но мне все еще интересно узнать о проблеме с COUNTA.

Если выяснится, что для этой команды мои ячейки не достаточно "достаточны", как я могу сделать их полностью пустыми?

Ответ 1

К сожалению, это функции, созданные от Google.
Хотя я не уверен, почему он отличается от того, что Excel вычисляет COUNTA.

В соответствии с Документация Google Spreadsheet на COUNTA:

COUNTA подсчитывает все значения в наборе данных, включая те, которые появляются более одного раза, и текстовые значения (, включая строки с нулевой длиной и пробелы).

Смысл, что единственный способ "сделать [ячейки] полностью пустыми" - удалить все содержимое, формулу и все. Но не бойтесь...

Некоторые обходные пути:

  • Гипотетически, вы можете сделать это с помощью =COUNTIF(A3:A8,"<>"&""), но таблицы Google не поддерживают не равный оператору в функции COUNTIF в соответствии с этими форумами: 1, 2, 3

  • Обходной путь заключается в создании массива правды или ложности на основе этого условия и использования SUMPRODUCT для подсчета правных значений следующим образом:

    =SUMPRODUCT((A3:A8<>"")*1)
    
  • Другой вариант, который вы могли бы выполнить, - написать пользовательскую функцию и добавить его на диск.
    На самом деле это довольно легко сделать. Перейдите в раздел Инструменты > Script Редактор и добавьте следующий script:

    /**
     * Works like COUNTA except does not include null strings
     *
     * @param {cellRange} myArray The value or range to consider when counting.
     * @return Returns the a count of the number of values in a dataset.
     * @customfunction
     */
    function CountNotBlank(myArray) {
      var output = 0;
      for (i = 0; i < myArray.length; i++) { 
        if (myArray[i] != "") {
          output += 1
        }
      }
      return output;
    }
    

    Затем используйте так:

    =CountNotBlank(I31:I)
    

Ответ 2

Я бы постарался: = IF (ISNUMBER (D31), "X", iferror (1/0))

Мне сказали, что iferror (1/0) ничего не возвращает.