web-dev-qa-db-ja.com

空でない値を持つ行を数える

Google Spreadsheetでは、特定の領域の値を持つ行を数える方法はありますか。私がこれまでに見つけたこのことに関するすべてのヒントは、空ではないコンテンツ(数式を含む)を持つ行を数えますが、

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

同様にカウントされます。

この単純な作業に対する解決策は何ですか?

92
Robbit

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

154
Mike
=counta(range) 
  • counta: "データセット内の値の数を返します

    注:CountAは、""と見なします。空白のセル(空白にするにはセル内でDeleteキーを押す)だけがカウントされません。

    Googleサポート: https://support.google.com/docs/answer/3093991

  • countblank: "特定の範囲内の空のセルの数を返します"

    注:CountBlankは、空白セル(セルを空白にするにはDeleteキーを押す)と""を返す式を持つセルの両方をのセルと見なします。

    Googleサポート: https://support.google.com/docs/answer/30934

""という結果になる式を含む範囲がある場合は、次の式から式を変更できます。

=counta(range)

に:

=Counta(range) - Countblank(range)

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

93
Delta_zulu

これが私が今までのところ最良の解決策であると信じるものです:

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

これが3つの簡単なステップで行われる理由です

ステップ1:パイとしてシンプル - 追加の列を追加する

=A1<>""は直感的に空白セル、つまり未使用の空白または作成された空白のどちらを考えるかに基づいて正しい真偽値に到達するように思われるため、 eniacAvengerによる回答 はEdgeのケースを気にせずに正しい解決策をもたらします。

そのため、このデータがあり、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列Cを当てにした場合、Bの値の数は次のようになります。

=COUNTIF(C2:C6,True)

ステップ2:FormulaArrayを使用して追加の列を動的に作成する

しかし、 ConsideRatio's comment は有効なものです - 追加の列が必要な場合は、シートスペースを占有することなくメモリ内に列を作成できる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)

参考文献

このスレッドの他の解決策は、過度に複雑であるか、またはこのテストシートで列挙した特定のEdgeのケースでは失敗します。

Googleスプレッドシート - CountAテスト - デモ

なぜCountAがうまく動かないのか、 私の答えはこちら を見てください。

29
KyleMit

私にとっては、バージンセルと数式に基づいて空のセルの両方を含む範囲(例:=IF(1=2;"";""))に対しては、どの答えもうまくいきませんでした。

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

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

16

私は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列に配置すると、このようになります。

7
consideRatio

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

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

空ではない数、文字列、日付などを数えます。

4
user300905

A:Aの範囲を考えると、Idは次のことを提案しています。

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

問題はCOUNTAが長さゼロの文字列""を持つセルの数だけオーバーカウントしていることです。

解決策は、正確にこれらの細胞の数を見つけることです。これは、すべてのテキストセルを検索し、少なくとも1文字のテキストセルすべてを減算することによって見つけることができます

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

つまり、値COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")は、テキストセルの数から1文字以上のテキストセルの数を引いた値、つまり正確に""を含むセルの数になります。

3
spacepickle

私が見ることができる限り、ここでの解決策のほとんどは空でないセルの数を数え、中に空でないセルを持つ行の数は数えません。

範囲B3:E29のための1つの可能な解決策は例えばです

=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)の列を返します。

もう1つは consideRatioの答え にあります。

2
Kpym

それは私のために働いています:

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

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

1
nomnom

そのようなことをするための非常に柔軟な方法はARRAYFORMULAを使うことです。

例として、空でない文字列(テキストフィールド)を数えたいとします。このコードを使うことができます。

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

ここで何が起こるかというと、 "ArrayFormula"によって一連の値を操作できます。 SUM関数を使用して、セットの任意の値を合計するために "ArrayFormula"を指定します。 "If"節は "empty"または "not empty"をチェックするためだけに使用され、1は空でないことを意味し、それ以外は0です。 "Len"はさまざまなテキストフィールドの長さを返します。確認したいセット(範囲)を定義する場所があります。最後に "ArrayFormula"は "len"が0以上を返す集合(範囲)内の各フィールドに対して1を合計します。

他の条件をチェックしたい場合は、IF句の最初の引数を変更するだけです。

0
Pablo

例えばnumNonEmptyRowsと呼ばれるApps Script(Tools> Script editor)を使用してカスタム関数を定義できます。

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の範囲の空でない行の数を数えます。

0
Kpym

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 /

0
Will Rice