Порахуйте рядки з не порожнім значенням


128

У електронній таблиці Google: Як я можу порахувати рядки даної області, які мають значення? Усі підказки про це я знайшов до цього часу, що призводять до формул, які підраховують рядки, які мають не порожній вміст (включаючи формулу), але клітинку з

=IF(1=2;"";"")  // Shows an empty cell

зараховується також.

Яке рішення цього простого завдання?


6
Чи не підрахував би CountA для вас? Також дивіться SO нитка: stackoverflow.com/questions/12519073 / ...
Ozair Kafray


Відповіді:


-12

Створіть інший стовпець, який визначає, чи посилається клітинка порожня, використовуючи функцію "CountBlank". Потім використовуйте підрахунок значень, створених у новому стовпці "CountBlank".


3
Я вважаю це чітким твердженням, що іншого рішення для цього немає. Велике спасибі.
Роббіт

Коли вам потрібно додати ще один стовпець, ви майже завжди можете вирішити його, використовуючи додаткові формули, як-от містять деякі конкретні / розбиті / приєднані тощо.
razmatRatio

Наприклад, наступний рядок складає один рядок із 2d-діапазону комірок, який часто може вирішити безліч проблем: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- - погано продовжую працювати над вирішенням цього питання
розглядають

Я опублікував відповідь, яка вирішує мету, не покладаючись на окремі стовпці,
Раціон

203

Я щойно використовував, =COUNTIF(Range, "<>")і він рахував непусті клітини для мене.


14
На жаль, ця формула також підраховує клітини з формулами порожніх результатів.
Давид Везеловскі

23
У мене був той самий випуск, що і @ DávidVeszelovszki [формули були підраховані]. Я вирішив=COUNTIF(Range,"?*")
shawnrad

Питання полягає в тому, як рахувати рядки в діапазоні. Ви рахуєте клітинки в діапазоні?
AnnanFay

124
=counta(range) 
  • counta: "Повертає підрахунок кількості значень у наборі даних"

    Примітка: CountAвважає ""бути значення . Тільки комірки, які є порожніми (натисніть видалити в комірці, щоб очистити її), не враховуються.

    Підтримка Google: https://support.google.com/docs/answer/3093991

  • countblank: "Повертає кількість порожніх комірок у заданому діапазоні"

    Примітка: CountBlankрозглядаються як порожні комірки (натисніть видалити, щоб порожня клітинка), так і комірки, у яких формула повертається ""до порожніх комірок.

    Служба підтримки Google: https://support.google.com/docs/answer/3093403

Якщо у вас є діапазон, який включає формули, в результаті яких ""ви можете змінити свою формулу

=counta(range)

до:

=Counta(range) - Countblank(range)

EDIT: функція є countblank, ні countblanks, остання видасть помилку.


5
На жаль, це не працює для діапазонів, що включають як незаймані, так і обчислені пробіли. (Він віднімає
незлічені

3
Дякую за солодкі відгуки, ОП спеціально зазначила, що причина у нього є пробілами через формулу типу = IF (1 = 2; ""; ""), і я спеціально зазначив: "Якщо у вас є діапазон, що включає формули, які результат у "" ... "
Delta_zulu

Питання полягає в тому, як рахувати рядки в діапазоні. Ви рахуєте клітинки в діапазоні?
AnnanFay

38

Ось що я вважаю найкращим рішенням поки що:

=CountIf(ArrayFormula(range<>""),TRUE)

Ось чому в 3 простих кроки

Крок 1: Простий як пиріг - додайте додатковий стовпчик

Відповідь на eniacAvenger дасть правильне рішення , не піклуючись про випадки країв , як =A1<>""здається , щоб прийти до правильного truthy / falsy вартості , заснованим на тому , як ми інтуїтивно думати про порожніх клітинках, або незаймані заготовки або створені заготовки.

Тож уявіть, що у нас є ці дані, і ми хочемо, щоб кількість непрацьованих звітів була B2:B6:

|   |      A      |   B   |    C    |
|---|-------------|-------|---------|
| 1 | Description | Value | B1<>""  |
| 2 | Text        | H     | TRUE    |
| 3 | Number      | 1     | TRUE    |
| 4 | IF -> ""    |       | FALSE   |
| 5 | IF -> Text  | h     | TRUE    |
| 6 | Blank       |       | FALSE   |

Якби ми покладалися на стовпчик С , ми могли б отримати кількість значень у B так:

=COUNTIF(C2:C6,True)

Крок 2: Використовуйте FormulaArrayдля динамічного створення додаткового стовпця

Однак коментар obzirRatio є дійсним - якщо вам потрібен додатковий стовпець, ви часто можете досягти тієї самої мети, з ArrayFormulaякою можна створити стовпець у пам'яті, не витрачаючи місця на аркуші.

Отже, якщо ми хочемо створити C динамічно, ми можемо використовувати формулу масиву на зразок цієї:

=ArrayFormula(B2:B6<>"")

Якщо ми просто помістимо його в C2, він створив би вертикальний масив одним натисканням пера:

|   |      A      |   B   |    C                     |
|---|-------------|-------|--------------------------|
| 1 | Description | Value | =ArrayFormula(B2:B6<>"") |
| 2 | Text        | H     | TRUE                     |
| 3 | Number      | 1     | TRUE                     |
| 4 | IF -> ""    |       | FALSE                    |
| 5 | IF -> Text  | h     | TRUE                     |
| 6 | Blank       |       | FALSE                    |

Крок 3: Підрахунок значень у динамічному стовпці

Але коли це вирішено, нам більше не потрібен стовпець, щоб просто відображати значення.

ArrayFormulaбуде вирішувати в наступному діапазоні: {True,True,False,True,False}.
CountIfпросто займає будь-який діапазон, і в цьому випадку можна порахувати кількість значень True.

Таким чином, ми можемо обернутися CountIfнавколо значень, отриманих ArrayFormulaтаким чином:

=CountIf(ArrayFormula(B2:B6<>""),TRUE)

Подальше читання

Інші рішення в цій темі або надмірно складні, або не вдається в окремих крайніх випадках, які я перерахував у цьому тестовому аркуші:

Електронна таблиця Google - Тест CountA - Демо

Чому це CountAпрацює виграшно, як це робиться, дивіться мою відповідь тут


4
Ця відповідь є єдиним повним рішенням: вона успішно підраховує лише комірки з текстом (включаючи пробіл), числами та значеннями TRUE / FALSE, виключаючи генеровані пробіли, справді порожні комірки та помилки (# N / A, #REF !, # VALUE , # NAME?). Він також поверне 0, де немає значень
spacepickle

2
Я трохи розгубився, читаючи це, і випадково виявив, що ця формула теж працює ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... Будь ласка, не зрозумійте мене неправильно, ця відповідь найкращий, і його слід заохочувати більше.
twindham

2
@twindham погодився, що з точки зору побудови блоків цієї відповіді, що, ймовірно, простіше зберегти кожний логічний компонент недоторканим і переупорядкувати, ArrayFormula(...)щоб повернути масив значень всередині, CountIfяк ви запропонували. Я оновив відповідь та демонстрацію електронних таблиць. Вони обидва роблять те саме, але чистота - це поряд із добротою.
KyleMit

Питання полягає в тому, як рахувати рядки в діапазоні. Ви рахуєте непорожні клітинки в одному стовпчику? Чи може ваш підхід працювати над кількома колонками?
AnnanFay

19

Для мене жоден з відповідей не працював для діапазонів, що включають як незаймані клітини, так і клітини, які порожні на основі формули (наприклад =IF(1=2;"";""))

Що для мене це вирішило:

=COUNTA(FILTER(range, range <> ""))


Прекрасне рішення в тому випадку, якщо в колонціb містяться формали, які повертають значення! Велике спасибі
користувачеві1561325

На жаль, схоже, що якщо Filter()не знайде жодних елементів, він поверне те, #N/Aщо COUNTA()трактує як елемент, і тому завжди поверне 1, навіть якщо число має бути нульовим. Приклад у Google Sheets
KyleMit

7
@KyleMit Ви можете позбутися від проблеми нульового підрахунку, додавши постійне значення до діапазону і =COUNTA(filter({1;range},{1;range}<>"")) - 1
віднімивши

Питання полягає в тому, як рахувати рядки в діапазоні. Ви рахуєте клітинки в діапазоні. Цей код порушується, якщо ви спробуєте застосувати його до діапазону рядків.
AnnanFay

9

Вирішено за допомогою рішення, який я знайшов googling від Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

У наведеному нижче прикладі підраховується кількість непустих рядків у діапазоні A3: C, не забудьте оновити обидва діапазони у формулі відповідно до ваших інтересів.

=ArrayFormula(SUM(SIGN(MMULT(LEN(A3:C), TRANSPOSE(SIGN(COLUMN(A3:C)))))))

Також не забудьте уникнути кругових залежностей, це станеться, якщо ви, наприклад, порахуєте кількість не порожніх рядків у A: C і помістите цю формулу в стовпчик A або C.


1
Знайшов набагато більш чисте рішення, я опублікував це як нову відповідь.
Давид Везеловський

1
Єдине рішення, яке дає відповідь на запитання, підраховувати кількість рядків із порожньою коміркою всередині, а не рахувати кількість не порожніх комірок у діапазоні.
Kpym

7

Це для мене робота:

=SUMPRODUCT(NOT(ISBLANK(F2:F)))

Підрахунок усіх не порожніх комірок від F2 до кінця стовпця


5

З огляду на діапазон A:A, я припускаю:

=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))

Проблема полягає в перенарахуванні COUNTA точно на кількість комірок з рядками нульової довжини "".

Рішення полягає в тому, щоб знайти кількість саме цих комірок. Це можна знайти, шукаючи всі текстові комірки та віднімаючи всі текстові комірки принаймні з одним символом

  • COUNTA (A: A): комірки зі значенням, включаючи, ""але виключаючи справді порожні комірки
  • COUNTIF (A: A, "*"): комірки, що розпізнаються як текст, включаючи, ""але виключаючи справді порожні комірки , але виключаючи їх
  • COUNTIF (A: A, "? *"): Комірки, розпізнані як текст, принаймні один символ

Це означає, що значення COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")повинно бути числом текстових комірок мінус кількість текстових комірок, що мають принаймні один символ, тобто кількість комірок, що містять точно""


Користуючись демонстраційним аркушем @KyleMit, я знайшов цю формулу ще надмірною, оскільки вона буде містити будь-які комірки з помилками
spacepickle

Чи є різниця між коміркою, яка містить рядок нульової довжини, і коміркою, яка взагалі нічого не містить? Саме це змушує людей недовіряти комп’ютерам. . . Ви бачите, чому ми не можемо мати приємних речей?
Чесо

Питання полягає в тому, як рахувати рядки в діапазоні. Ви рахуєте клітинки в діапазоні?
AnnanFay

5

Більш просте рішення, яке працює для мене:

=COUNTIFS(A:A;"<>"&"")

Він рахує як числа, рядки, дати тощо, які не є порожніми


5
можна спростити у формі на зразок = COUNTIF (A: A, "<>")
Том,

Питання полягає в тому, як рахувати рядки в діапазоні. Ви рахуєте клітинки в діапазоні?
AnnanFay

3

Наскільки я бачу, більшість рішень тут підраховують кількість не порожніх комірок, а не кількість рядків із порожньою коміркою всередині.

B3:E29Наприклад, одне можливе рішення для асортименту

=SUM(ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)))

Тут ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))повертається стовпчик 0(якщо рядок порожній) та 1(else).

Ще одна дана у відповіді Раціо .


2

Ви можете визначити власну функцію за допомогою програми Script (Інструменти> Редактор сценаріїв), яка називається, наприклад numNonEmptyRows:

function numNonEmptyRows(range) {
  Logger.log("inside");
  Logger.log(range);
  if (range && range.constructor === Array) {
    return range.map(function(a){return a.join('')}).filter(Boolean).length
  }
  else {
    return range ? 1 : 0;
  }
}

А потім скористайтеся цією коміркою =numNonEmptyRows(A23:C25)для підрахунку кількості порожніх рядків у діапазоні A23:C25;


2

У Таблицях Google, щоб підрахувати кількість рядків, що містять принаймні одну не порожню клітинку в двовимірному діапазоні :

=ARRAYFORMULA(
  SUM(
    N(
      MMULT(
        N(A1:C5<>""),
        TRANSPOSE(COLUMN(A1:C5)^0)
      )
      >0
    )
  )
)

Де A1: C5 - це діапазон, який ви перевіряєте на непорожні рядки.

Формула походить і пояснюється в наступній статті від EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/


1

Дуже гнучкий спосіб робити такі речі - це використовувати ARRAYFORMULA.

Як приклад, уявіть, що ви хочете порахувати непорожні рядки (текстові поля), ви можете використовувати цей код:

=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))

Тут відбувається те, що "ArrayFormula" дозволяє вам працювати над набором значень. Використовуючи функцію SUM, ви вказуєте "ArrayFormula" для підсумовування будь-якого значення набору. Пункт "Якщо" використовується лише для позначення "порожній" або "не порожній", 1 - не порожній, а 0 - в іншому випадку. "Лен" повертає довжину різних текстових полів, там ви визначаєте набір (діапазон), який ви хочете перевірити. Нарешті, "ArrayFormula" підсумовує 1 для кожного поля всередині набору (діапазону), в якому "len" повертає більше 0.

Якщо ви хочете перевірити будь-яку іншу умову, просто змініть перший аргумент пункту IF.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.