空でない値を持つ行をカウントする


128

Googleスプレッドシート:値を持つ特定の領域の行を数えるにはどうすればよいですか?これまでに私が見つけたすべてのヒントは、空のコンテンツ(式を含む)を含む行をカウントする式につながりますが、

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

もカウントされます。

この単純なタスクの解決策は何ですか?


6
CountAはうまくいきませんか?:また、このSOスレッド参照stackoverflow.com/questions/12519073/...
Ozair Kafray


回答:


-11

関数「CountBlank」を使用して、参照されるセルが空白かどうかを判断する別の列を作成します。次に、新しい「CountBlank」列に作成された値のカウントを使用します。


3
これに対する他の解決策はないという明確な声明としてこれを考えます。どうもありがとうございました。
Robbit、2014年

別の列を追加する必要がある場合は、ほとんどの場合、いくつかの連結/分割/結合などの追加の数式を使用して解決できます。
consideRatio

たとえば、次の行は2dのセル範囲から1つの行を作成し、多くの問題を解決できることがよくあります。= split(ArrayFormula(concatenate(C3:O4& ";"))、 ";")--- -病気の解決に引き続き取り組みます
consideRatio 2015年

個別の列に依存せずに目標を解決する回答を投稿しました
consideRatio

203

私はちょうど使用し=COUNTIF(Range, "<>")、それは私のために空でない細胞を数えました。


14
残念ながら、この数式は空白の結果の数式を持つセルもカウントします。
デヴィッド・Veszelovszki

23
私は@DávidVeszelovszkiと同じ問題がありました[式は数えられました]。私は次のように解決しました=COUNTIF(Range,"?*")
shawnrad、2018

問題は、範囲内の行をカウントする方法を尋ねることです。範囲内のセルを数えていますか?
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)

編集:関数はcountblank、ではなくcountblanks、後者はエラーになります。


5
残念ながら、これは新しい空白と計算された空白の両方を含む範囲では機能しません。(COUNTAの値からカウントされていないバージンブランクを差し引きます。)
DávidVeszelovszki

3
好意的な賛成投票のおかげで、OPは彼が空白を持っている理由が= IF(1 = 2; ""; "")のような式のためであると具体的に述べました、そして私は特に述べました:結果は "" ... "
Delta_zulu 2016年

問題は、範囲内の行をカウントする方法を尋ねることです。範囲内のセルを数えていますか?
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   |

列Cに依存している場合、次のようにBの値の数を取得できます。

=COUNTIF(C2:C6,True)

手順2:を使用FormulaArrayして動的に追加の列を作成する

ただし、consideRatioのコメントは有効です。追加の列が必要な場合は、ArrayFormulaシートスペースを消費することなくメモリ内に列を作成できるで同じ目的を達成できることがよくあります。

したがって、Cを動的に作成する場合は、次のような配列数式を使用できます。

=ArrayFormula(B2:B6<>"")

単純にC2に配置すると、ペンの1回のストロークで垂直配列が作成されます。

|   |      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
この回答は唯一の完全なソリューションです。生成された空白、真に空のセル、およびエラー(#N / A、#REF!、#VALUE)を除外しながら、テキスト(スペースを含む)、数値、およびTRUE / FALSE値を持つセルのみを正常にカウントします、 #名前?) 。値がない場合も0を返します
spacepickle

2
これを読んで少し混乱し、この数式も機能することを誤って発見しました... = CountIf(ArrayFormula(B2:B6 <> "")、TRUE)...誤解しないでください。この答えは最高のもの、そしてもっと賛成されるべきです。
ツインダム

2
@twindhamは同意しました。この回答のブロックを構築することに関しては、各論理コンポーネントをそのまま維持し、順序ArrayFormula(...)を変更して、CountIf提案したとおりに内部の値の配列を返す方が簡単だと考えています。回答とスプレッドシートのデモを更新しました。どちらも同じことをしますが、清潔さは次善点です。
KyleMit 2017

問題は、範囲内の行をカウントする方法を尋ねることです。1つの列の空白でないセルを数えていますか?あなたのアプローチは複数のカラムで機能しますか?
AnnanFay

19

私にとって、式に基づいて未使用のセルと空のセルの両方を含む範囲に対しては、どの回答も機能しませんでした(例=IF(1=2;"";"")

私にとってそれを解決したのはこれです:

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


columnbに ""値を返す形式が含まれている場合の優れたソリューション!
どうも

残念ながら、それは場合のように見えるFilter()すべての要素を見つけることができません、それが返され#N/ACOUNTA()要素として扱いをし、カウントがゼロでなければならない場合でもそう常に、1を返します。Googleスプレッドシートの例
KyleMit 2017

7
@KyleMit範囲に定数値を追加し、カウントから1を引くことで、ゼロカウントの問題を取り除くことができます=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle

問題は、範囲内の行をカウントする方法を尋ねることです。範囲内のセルを数えています。このコードは、行の範囲に適用しようとすると壊れます。
AnnanFay

9

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
もっとすっきりした解決策を見つけて、新しい回答として投稿しました。
デヴィッド・Veszelovszki

1
内部の空でないセルの行数を数え、範囲内の空でないセルの数を数えないという質問に答える唯一の解決策。
Kpym

7

それは私にとっては仕事です:

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

F2から列の終わりまでのすべての空でないセルの数


5

範囲を指定するとA:A、Idは以下を提案します。

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

問題は、長さ0の文字列を持つセルの数だけCOUNTAが過大にカウントすること""です。

解決策は、これらのセルの数を正確に見つけることです。これは、すべてのテキストセルを探し、少なくとも1つの文字を含むすべてのテキストセルを差し引くことで見つけることができます。

  • COUNTA(A:A):値を含むセル。 ""真に空のセルをが除外するセル
  • COUNTIF(A:A、 "*"):完全に""空白のセルを含むが除外する、テキストとして認識されたセル
  • COUNTIF(A:A、 "?*"):少なくとも1文字のテキストとして認識されるセル

これは、値COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")がテキストセルの数から少なくとも1つの文字を含むテキストセルの数を差し引いたもの、つまり正確に含まれるセルの数であることを意味します""


@KyleMitデモシートを使用して、エラーのあるセルが含まれるため、この式はまだ
数え切れ

長さゼロの文字列を含むセルと何も含まないセルには違いがありますか?これは、人々がコンピュータを不信にさせるものです。。。私たちがいいものを持てない理由がわかりますか?
Cheeso

問題は、範囲内の行をカウントする方法を尋ねることです。範囲内のセルを数えていますか?
AnnanFay

5

私のために働くより簡単な解決策:

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

空ではない数値、文字列、日付などの両方をカウントします


5
= COUNTIF(A:A、 "<>")のような形式で簡略化できます
Tom

問題は、範囲内の行をカウントする方法を尋ねることです。範囲内のセルを数えていますか?
AnnanFay

3

私の知る限り、ここでのほとんどの解決策は、空でないセルの数を数え、空でないセルが内部にある行の数は数えません。

範囲の1つの可能なソリューション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(他)。

もう1つは、consideRatioの回答に記載されています


2

たとえばnumNonEmptyRows次のように呼び出されるApps Script([ツール]> [スクリプトエディター])を使用してカスタム関数を定義できます。

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スプレッドシートで、2次元の範囲内に空でないセルが少なくとも1つ含まれている行の数を数えるには:

=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」を指定します。「If」句は、「空」または「空ではない」をチェックするためにのみ使用され、1は空ではないことを、そうでない場合は0をチェックします。「Len」は、さまざまなテキストフィールドの長さを返します。確認するセット(範囲)を定義する場所があります。最後に、「ArrayFormula」は、「len」が0を超える値を返すset(range)内のフィールドごとに1を合計します。

他の条件を確認する場合は、IF句の最初の引数を変更するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.